通常情况下,您可以通过按钮来创建动作
[button addTarget:self action:@selector(method:)...
我可以猜测是否要将动作发送到另一个班级,但如果我想将其发送给父母怎么办?我认为超级可能会起作用,但会发出警告。
编辑:超级崩溃App
欢呼任何帮助。
答案 0 :(得分:7)
假设您有以下类:
@interface Base {
}
- (IBAction)method:(id)sender;
@end
@interface Derived {
}
@end
如果Derived没有自己的method:
实现,那么self
和@selector(method:)
的标准设置就可以满足您的需求。
如果Derived DOES拥有它自己的method:
实现,那么你别无选择,只能在派生中添加你自己的方法,除了将调用转发到超类实现之外什么都没有。
- (void)callMethodOnSuper:(id)sender {
[super method:sender];
}
然后使用 @selector(callMethodOnSuper:)
代替。您不能只提供super
作为目标。
编辑:以下是基于以下评论的更新,实际上澄清了OP想要做的事情。
为了确保我清楚,我会重申你的情况。你有一个视图控制器,比如MyViewContoller,它的视图有三个子视图。其中一个子视图是MyCustomView,它有一些UIButton子视图。
我的建议如下:
@interface MyViewController {
}
@end
@interface MyCustomView {
UIButton* button1;
UIButton* button2;
}
@property (nonatomic,readonly,retain) UIButton* button1;
@property (nonatomic,readonly,retain) UIButton* button2;
@end
当您的视图控制器正在构建它的视图时:
[myCustomView.button1 addTarget:self action:@selector(method:)...
[myCustomView.button1 addTarget:self action:@selector(method:)...
答案 1 :(得分:0)
我理解你的问题的方式,你正在尝试实现与委托模式完全相同的东西,但是你绕过它的方式,如果超类没有实现,你将不会得到任何编译器提示或错误对于目标的正确方法,它会在你运行时崩溃。
关于封装,这似乎是一个好主意,但我认为如果你在其他地方重用视图组件就很难调试。
我使用尝试发送除“self”之外的其他内容的方法的唯一情况是ViewController具有X个视图,并且这些视图需要彼此并且需要对彼此的操作做出反应。尽管如此,如果我已经将viewController实现为视图的委托,我只是让viewController将其他视图更改为它们应该进入的状态。
(希望我没有误解这个问题)