我实例化一个类,然后我尝试更改实例化类按钮的选择器:
WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom" bundle:nil];
[[newtab tabsButton]setAction:@selector(addtabs:)];
按钮tabsbutton
是WebViewController类的出口,它在接口构建器中直接链接。
方法-(void)Addtabs:(id)sender
是我当前课程中的一种方法。
但似乎这段代码不起作用,我的按钮就在这里,但是当我点击它时它什么也没做。
如果您需要更多背景,请不要犹豫。我知道这可能非常简单,但我只是对它感到厌烦....
答案 0 :(得分:0)
请注意,-initWithNibName:bundle:
不会立即加载nib文件。这意味着在发送之后,您不能指望设置您的商店。
在您发送-setAction:
的那一行,您的tabsButton
商店可能是nil
。
如果WebViewController
继承自NSViewController
,您可以放置在-loadView
类的WebViewController
方法中设置操作的行,以确保nib文件已被删除加载并设置所有插座:
- (void)loadView {
[super loadView];
[tabsButton setAction:@selector(addtabs:)];
// or [self.tabsButton setAction:@selector(addtabs:)];
}
或者,如果您不想在视图控制器中执行此操作,则可以在任意类中执行以下操作:
WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom"
bundle:nil];
[newtab view];
[[newtab tabsButton]setAction:@selector(addtabs:)];
通过将-view
发送到视图控制器,您强制它加载nib文件,因此{I}插槽将在此之后设置。
请注意,您可以在任何类中设置操作,因为选择器未绑定到类。另请注意,由于您尚未设置目标,因此操作将遵循操作链。