我想完成触摸 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.