Ben*_*ves 7 macos cocoa objective-c
我想使用cocoa向另一个对象发送一个动作.理想情况下,我还希望它出现在"界面"构建器中.
我已经尝试了苹果文档,但有些东西我不见了.添加以下内容,界面构建仅将操作显示为已接收的操作.
- (IBAction)setTarget:(id)anObject;
- (IBAction)setAction:(SEL)aSelector;
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个如何创建已发送动作的示例.谢谢
我有我的controller1中定义的接收操作.然后我希望我的controller2能够向controller1发送一个动作(就像NSButton那样).在界面构建中,您可以将一行FROM NSButton拖到应该接收信号的控件上.此功能不仅限于那里的苹果对象,必须是一种方法.
TAL*_*ama 18
IBAction是一个预处理器指令,告诉Interface Builder"这是你应该知道的事情." 它实际上评估为void.这意味着"动作"只是您可以正常方式调用的常规方法:
[target someMethod:self];
Run Code Online (Sandbox Code Playgroud)
如果要模仿可以从中获取的行为NSButton,可以为目标添加插座,为选择器添加属性(作为字符串):
@property (nonatomic, retain) IBOutlet id target;
@property (nonatomic, retain) NSString* actionSelectorString;
Run Code Online (Sandbox Code Playgroud)
你可以这样打电话:
SEL action = NSSelectorFromString(self.actionSelectorString);
[self.target performSelector:action withObject:self];
Run Code Online (Sandbox Code Playgroud)
如果您希望您的类通过在Interface Builder中拖放来连接选择器,最简单的方法是使您的类成为子类NSControl(从对象库拖动自定义视图,Command-6显示检查器,选择你的班级在顶部弹出窗口).然后,您可以通过以下方式"呼叫"该操作:
- (void) go {
[self sendAction:self.action to:self.target];
}
Run Code Online (Sandbox Code Playgroud)
controller1 和controller2 是NSControl 的子类。
[controller2 sendAction:@selector(receiveAction:) to:controller1];
Run Code Online (Sandbox Code Playgroud)