Ios 从UIButton的类获取当前UIViewController

Ios 从UIButton的类获取当前UIViewController,ios,objective-c,uiviewcontroller,uibutton,Ios,Objective C,Uiviewcontroller,Uibutton,我有自定义的UIButton,它通过协议以编程方式与ViewController方法交互触发器。但按钮的行为必须取决于放置在其上的ViewController。我这样做是为了尽量减少ViewController本身的代码量,因为按钮必须保持不变,并具有相同的导航功能。 UIButton的自定义类中是否有任何方法可以获取它所在的ViewController?我会以特定的方式遵循@rmaddy的建议,借鉴SDK的风格 // MyCutomButton.h @protocol MyCustomButt

我有自定义的UIButton,它通过协议以编程方式与ViewController方法交互触发器。但按钮的行为必须取决于放置在其上的ViewController。我这样做是为了尽量减少ViewController本身的代码量,因为按钮必须保持不变,并具有相同的导航功能。
UIButton的自定义类中是否有任何方法可以获取它所在的ViewController?

我会以特定的方式遵循@rmaddy的建议,借鉴SDK的风格

// MyCutomButton.h
@protocol MyCustomButtonDatasource;

@interface MyCustomButton : UIButton
@property(weak,nonatomic) IBOutlet id<MyCustomButtonDatasource>datasource;
// etc
@end

@protocol MyCustomButtonDatasource <NSObject>
@optional
- (NSString *)howShouldIBehave:(MyCustomButton *)button;
@end
编辑-要创建关系,如果已将属性装饰为如上所示的IBOutlet,则应该能够在IB中设置关系。将视图控制器声明为实现。选择自定义按钮,然后选择连接检查器,然后拖动到视图控制器

或者,使按钮本身成为视图控制器中的IBOutlet属性,并在viewDidLoad中执行以下操作:

self.customButton.datasource = self;
最后一种方法是给你的按钮一个标签,比如说128,然后:

MyCustomButton *customButton = (MyCustomButton *)[self.view viewWithTag:128];
self.customButton.datasource = self;

那不是你想做的。而是将属性添加到button类。然后,每个视图控制器都可以根据需要设置属性。按钮不应该知道任何视图控制器的任何信息。关键的想法是根本不要用VC编写代码。在你的例子中,我必须重写VC类,不过,只有当问题出现时,我才可以将一个类重写为自定义行为:按钮放在故事板上,除了协议,没有任何编程连接。所以,如果我只有一个VC需要自定义行为,如何从VC端访问按钮?VC可以通过出口或属性访问其视图。在MVC中,视图永远不应该知道它的控制器。从这个角度来看,我的自定义UIButton是控制器还是视图?它以编程方式创建和隐藏一些按钮。按钮会触发相应VCs上的操作。将该方法作为可选方法包括在内并仅在应使用非默认行为的VC上实现是否是一种良好的做法?VC方面还有一个问题-如何将HowShouldBehave方法绑定到ViewController?我需要创建CustomButton的一个新实例吗?我认为不需要,或者只是抓住现有的按钮。我需要这个来设置委托。
MyCustomButton *customButton = (MyCustomButton *)[self.view viewWithTag:128];
self.customButton.datasource = self;