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

时间:2011-10-30 17:15:15

标签: objective-c ios

我想完成触摸 UIButton并让代码在不同的类中运行。

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

思路:

  • ClassB成为ClassA->UIButton

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

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

1 个答案:

答案 0 :(得分:20)

一个选项是使用

设置按钮
[myButton addTarget:yourOtherClass action:@selector(mySelector:) forControlEvents:UIControlEventTouchUpInside];

但这有点危险,因为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

然后在您的实施中

MyController.m

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

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