使用cocoa将另一个类的按钮分配给当前的类选择器

时间:2011-04-24 09:18:23

标签: objective-c cocoa

我实例化一个类,然后我尝试更改实例化类按钮的选择器:

WebViewController *newtab = [[WebViewController alloc] initWithNibName:@"NavigatorNoBottom" bundle:nil];
[[newtab tabsButton]setAction:@selector(addtabs:)]; 

按钮tabsbutton是WebViewController类的出口,它在接口构建器中直接链接。 方法-(void)Addtabs:(id)sender是我当前课程中的一种方法。

但似乎这段代码不起作用,我的按钮就在这里,但是当我点击它时它什么也没做。

如果您需要更多背景,请不要犹豫。我知道这可能非常简单,但我只是对它感到厌烦....

1 个答案:

答案 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}插槽将在此之后设置。

请注意,您可以在任何类中设置操作,因为选择器未绑定到类。另请注意,由于您尚未设置目标,因此操作将遵循操作链。