使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?

Posted

技术标签:

【中文标题】使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?【英文标题】:After loading nib with NSViewController... how do I access the NSButton in the nib? 【发布时间】:2009-11-27 16:32:57 【问题描述】:

我已经将 NSViewController 子类化,其中 IBOutlets 连接到辅助 nib 中的 NSButton。

我可以实例化 NSViewController 并在 NSMenu 中应用视图——效果很好——但是如何访问按钮来更改其标题?

由于 NSViewController 有 IBOutlets,我假设我会通过控制器来执行此操作。

//this part works great
NSViewController *viewController = [[toDoViewController alloc] initWithNibName:@"toDoView" bundle:nil];
NSView *newView = [viewController view];
newMenuItem.view = newView;

//this part not so much
[viewController [toDoButton setTitle:someStringHere]];

关于从这里去哪里的任何指示?

编辑添加:toDoViewController 类 --

@interface toDoViewController : NSViewController 
    IBOutlet NSButton *checkBoxButton;
    IBOutlet NSButton *toDoButton;


@end

【问题讨论】:

【参考方案1】:
[viewController [toDoButton setTitle:someStringHere]];

正如交互式小说解释器所说,“那似乎缺少了一个动词。”

您有一个接收者 (viewController)、一个完整的消息表达式 ([toDoButton setTitle:…]) 和括号,但是您缺少一个选择器。因此,这不是有效的消息表达式。

有两种可能:

    您的意思是向视图控制器发送消息,将setTitle: 的结果作为参数传递,而您忘记了选择器。我觉得这不太可能,因为 NSButton 的 setTitle: 没有返回任何内容。 您的意思是从视图控制器获取按钮,然后向按钮发送setTitle: 消息。假设这个视图控制器是 NSViewController 子类的一个实例,您在其中添加了 toDoButton 属性,请使用 [[viewController toDoButton] setTitle:someStringHere][viewController.toDoButton setTitle:someStringHere]

【讨论】:

对我来说很有意义,但是当我尝试该代码时,我得到:“-[toDoViewController toDoButton]: unrecognized selector sent to instance”...出于某种原因,viewController(toDoViewController 的实例)不是t 认识到它可以访问 toDoButton。 正如我所说,您需要使该视图控制器成为您添加了 toDoButton 属性的子类的实例。 在上面编辑以添加我的 toDoViewController 子类定义。 toDoButton 被定义为一个 IBOutlet,它连接到 IB 中的视图控制器。我错过了一步吗? 是的:您尚未将其设为属性。请参阅 Objective-C 2.0 编程语言中的属性部分:developer.apple.com/mac/library/documentation/Cocoa/Conceptual/…

以上是关于使用 NSViewController 加载 nib 后...如何访问 nib 中的 NSButton?的主要内容,如果未能解决你的问题,请参考以下文章

NSBundle 加载一个 NSViewController

如何在 NSViewController 中重新加载数据?

在 NSTabView 上加载相同 NSViewController 的不同实例

如何在 NSApplicationDelegate 上加载 NSViewController

从 NSViewController 在 OS X 上加载 nib

使用 NSViewController 在 osx 上切换视图控制器