Jef*_*ern 1 windows xcode cocoa objective-c
我在使用Cocoa创建新窗口时遇到问题.假设,假设我有"WindowA",并有一个名为"myButton"的按钮.当您单击"myButton"时,它会在以下类文件中运行此代码:
-(void)openFile2:(id)sender
{
myNextWindow = [[TestWindowController alloc] initWithWindowNibName:@"MainMenu"];
NSString *testString = @"foo";
[myNextWindow showWindow:self];
[myNextWindow setButtonText:testString];
}
Run Code Online (Sandbox Code Playgroud)
简而言之,代码会复制"WindowA"并显示它.如您所见,此代码还运行一个名为'setButtonText'的方法,它是这样的:
- (void)setButtonText:(NSString *)passedText
{
[myButton setTitle:passedText];
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我在本地调用此方法时,在原始窗口中 - 按钮文本更改(例如,[self setButtonText:testString])它可以工作.但是,它在新创建的窗口中不起作用(例如,[myNextWindow setButtonText:testString];)
当我逐步调试新创建的窗口时,它给出的'myButton'值是0x0.我是否必须手动将控制器/代理分配给新窗口?我认为代码中的'myButton'与新创建的窗口中的'myButton'没有关联.
我该如何解决这个问题?
第一个问题是您MainMenu反复加载NIB/XIB.这将做非常糟糕的事情 - MainMenu应该只在应用程序启动时加载一次.
您希望将需要重复加载的任何UI分解为单独的NIB/XIB文件(与基于文档的应用程序具有MainMenu.xib和Document.xib文件的方式相同).
要正确执行此操作,您需要了解"文件所有者"的概念以及如何正确利用它.请注意,窗口控制器也存在重叠,如果要使用它们,了解它们将会很有帮助.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |