选择器发送给父而不是self

Rud*_*ger 1 iphone cocoa-touch uikit

通常,当您使用按钮创建动作时,您可以使用此功能

[button addTarget:self action:@selector(method:)...
Run Code Online (Sandbox Code Playgroud)

我可以猜测是否要将动作发送到另一个类但是如果我想将它发送给父级呢?我认为超级可能会起作用,但这会发出警告.

编辑:超级崩溃的应用程序

欢呼任何帮助.

ima*_*boy 7

假设您有以下类:

@interface Base {
}
- (IBAction)method:(id)sender;
@end

@interface Derived {
}
@end
Run Code Online (Sandbox Code Playgroud)

如果派生没有它自己的执行method:,然后你用标准设置self,并@selector(method:)会做你想要什么.

如果Derived DOES拥有它自己的实现,method:那么你别无选择,只能在派生中添加自己的方法,除了将调用转发到超类实现之外.

- (void)callMethodOnSuper:(id)sender {
    [super method:sender];
}
Run Code Online (Sandbox Code Playgroud)

然后@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
Run Code Online (Sandbox Code Playgroud)

当您的视图控制器构建它的视图时:

[myCustomView.button1 addTarget:self action:@selector(method:)...
[myCustomView.button1 addTarget:self action:@selector(method:)...
Run Code Online (Sandbox Code Playgroud)