objective-c - 以编程方式在 Cocoa 中创建新窗口和访问窗口对象

标签 objective-c windows cocoa xcode

我在 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/

相关文章:

objective-c - 如何强制刷新 NSTextField 标签

ios - GoogleService-info.plist 中的 Build Settings User-Defined Setting

iphone - 永远不会在 ios 的 google API 中获得上传数据进度

c - 使用 Windows cmd 作为 visual studio dev cmd

windows - 如果 "14"LEQ "7"() 失败

cocoa - 解决 64 位转换中从不同大小的整数转换为指针的错误

cocoa - 类似 iPhoto 的图像裁剪?

ios - 带有静态枚举和字典的常量文件

iphone - 关于图像尺寸和分辨率

python - 如何为 Windows 编译 cymunk?