从子视图中的UIButton调用UIViewController中的方法

Str*_*rer 5 inheritance protocols objective-c uibutton

仍在学习Objective C并使结构正确.

我有一个带有UIViewController的iOS应用程序,它有一个名为"doSomething"的已定义方法.在我的视图控制器中,我有一个视图,在该视图中有一些我以编程方式创建的UIButton(参见下面的示例,只有一个按钮).

在此输入图像描述

现在,当我按下按钮时,我想调用我的方法"doSomething".我目前这样做的方式是这样的:

[myButton addTarget:nil 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

由于我的目标是nil,它会响应响应者链,直到找到一个名为"doSomething"的方法.它有效,但它感觉不对.

我已经开始考虑使用@protocol,但并没有真正了解它.我一直在看一些教程,但对我来说还不够清楚.我已经使用了类似于表视图控制器的协议,但定义一个对我来说是新的.

是否有可能为这个特定案例得到一个例子?

谢谢!

sko*_*lis 4

当您的目标传入视图控制器时,将在该对象上调用该方法。

编辑:

[myButton addTarget:controller 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)

假设您有一个名为控制器的变量,它是您的 UIViewController。如果您没有对控制器的引用,则只需将一个引用传递给您的视图即可。

编辑2:

查看界面:

@property (assign) UIViewController* controller;
Run Code Online (Sandbox Code Playgroud)

查看实现:

@synthesize controller;
Run Code Online (Sandbox Code Playgroud)

控制器:

- (void) viewDidLoad {
    [super viewDidLoad];
    someView.controller = self;
}
Run Code Online (Sandbox Code Playgroud)