我想完成触摸 UIButton
并让代码在不同的类中运行。
我意识到我可以对按钮的所有者(touchUpInside
)执行ClassA
,然后调用我想要调用的ClassB
内的方法,但是有没有办法加速这个?
思路:
让ClassB
成为ClassA->UIButton
在编程中设置touchUpInside
调用以使用ClassB
内的函数
我不确定如何完成以下任何一个想法:(输入是mas赞赏!
答案 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
。