我在 Cocoa 中创建新窗口时遇到问题。 假设地说,假设我有“WindowA”和一个名为“myButton”的按钮。 当您单击“myButton”时,它会在以下类文件中运行此代码:
-(void)openFile2:(id)sender
{
myNextWindow = [[TestWindowController alloc] initWithWindowNibName:@"MainMenu"];
NSString *testString = @"foo";
[myNextWindow showWindow:self];
[myNextWindow setButtonText:testString];
}
简而言之,代码复制了“WindowA”并显示了它。如您所见,这段代码还运行了一个名为“setButtonText”的方法,它是这样的:
- (void)setButtonText:(NSString *)passedText
{
[myButton setTitle:passedText];
}
问题是,当我在本地调用此方法时,在原始窗口中 - 按钮文本发生变化(例如,[self setButtonText:testString])它起作用了。但是,它在新创建的窗口中不起作用(例如,[myNextWindow setButtonText:testString];)
当我调试新创建的窗口时,一步一步,它给出的'myButton'值是0x0。我是否必须手动将 Controller /代表分配给新窗口?我认为代码中的“myButton”与新创建的窗口中的“myButton”没有关联。
我该如何解决这个问题?
最佳答案
第一个问题是您正在重复加载 MainMenu
NIB/XIB。这会造成非常糟糕的结果——MainMenu
应该只在应用程序启动时加载一次。
您想将任何需要重复加载的 UI 分解为单独的 NIB/XIB 文件(与基于文档的应用程序具有 MainMenu.xib 和 Document.xib 文件的方式相同)。
要正确执行此操作,您需要了解 concept of "File's Owner" and how to leverage it properly .请注意,窗口 Controller 也有重叠,如果您想使用它们,了解它们将会有所帮助。
关于objective-c - 以编程方式在 Cocoa 中创建新窗口和访问窗口对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936656/