使用 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
在 NSTabView 上加载相同 NSViewController 的不同实例
如何在 NSApplicationDelegate 上加载 NSViewController