UIButton在代码中设置了触摸处理程序

Jac*_*nkr 5 objective-c ios

我想完成触摸 a UIButton并让代码在与所有者不同的类中运行.

我意识到我可以touchUpInside对按钮的所有者(ClassA)执行操作,然后调用ClassB我想调用的方法,但有没有办法加快这个?

思路:

  • ClassB是为委托ClassA->UIButton

  • touchUpInside在编程中设置调用以使用内部函数ClassB

我不知道如何完成以下任何一个想法:(输入是mas赞赏!

Pau*_*l.s 20

一种选择是使用设置按钮

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

但这有点危险,因为target没有保留,所以你可以将消息发送到一个解除分配的对象.

您可以改为设置协议

MyController.h

@protocol MyControllerDelegate
- (void)myController:(MyController *)controller buttonTapped:(UIButton *)button;
@end

@interface MyController : UIViewController

@property (nonatomic, assign) id <MyControllerDelegate> delegate;

- (IBAction)buttonTapped:(UIButton *)button;

@end
Run Code Online (Sandbox Code Playgroud)

然后在你的实现中

MyController.m

- (IBAction)buttonTapped:(UIButton *)button
{
    if ([self.delegate respondsToSelector:@selector(myController:buttonTapped:)]) {
      [self.delegate myController:self buttonTapped:button];
    }
}
Run Code Online (Sandbox Code Playgroud)

由于协议中定义的方法不是可选的,我可以改为进行检查(self.delegate)以确保设置而不是respondsToSelector.