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

时间:2011-05-25 03:01:00

标签: objective-c inheritance uibutton protocols

仍然了解Objective C并使结构正确。

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

enter image description here

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

[myButton addTarget:nil 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:4)

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

编辑:

[myButton addTarget:controller 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside];

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

EDIT2:

查看界面:

@property (assign) UIViewController* controller;

查看实施:

@synthesize controller;

控制器:

- (void) viewDidLoad {
    [super viewDidLoad];
    someView.controller = self;
}

答案 1 :(得分:0)

我这样做的方法是将addTarget的值设置为self

[myButton addTarget:self 
             action:@selector(doSomething:)
     forControlEvents:UIControlEventTouchUpInside]

这将在添加目标的对象上查找方法doSomething。在这种情况下,这将是视图控制器。