【问题标题】:Text on label not set when window appears出现窗口时未设置标签上的文本
【发布时间】:2013-10-29 20:14:10
【问题描述】:
我用自定义的 MyWindow.xib 和 MyWindowController 制作了一个小型 Cocoa 应用程序。该窗口包含一个 NSTextField(标签),并且从我的 AppDelegate 我正在初始化这个控制器和它的视图,在标签上设置一个文本并显示窗口:
self.controller =[[MyWindowController alloc] initWithWindowNibName:@"MyWindow"];
[self.controller setText:@"My text"];
[self.controller showWindow:self];
但当窗口出现时,仍会显示默认的“标签”文本。为什么?
我的示例项目可以在这里下载:http://s000.tinyupload.com/?file_id=00611347759347594342。
【问题讨论】:
标签:
objective-c
cocoa
nsview
nswindow
nswindowcontroller
【解决方案1】:
这里的问题是您的标签实际上还不是可视的,因此更改文本没有任何作用。解决此问题的一种方法是在控制器中拥有一个字符串属性并设置它:
self.controller.textForLabel = @"My text";
然后在你的viewWillAppear:你的控制器的.m中你可以设置文本:
[self setText:self.textForLabel];
【解决方案2】:
在您的项目中,您在显示窗口之前更改文本,这是在初始化之前完成的。只需切换这个:
[self.controller setText:@"My text"];
[self.controller showWindow:self];
到
[self.controller showWindow:self];
[self.controller setText:@"My text"];
【解决方案3】:
两种解决方法:
替换两行代码,显示窗口后设置文本,应该是这样的:
[self.controller showWindow:self];
[self.controller setText:@"My text"];
另一种方法是在“-(void)windowDidLoad”函数内更改 MyWindowController.m 文件中的标签文本。