虽然我已经在Linux,BSD和Windows上进行了多年的编程,但我是Mac开发的新手,我想我不是'得到它' 当谈到Mac / Objective-C / Xcode开发模式时。
我在Interface Builder中创建了一个名为Window2
的新窗口。此窗口是添加到MainMenu.xib
的对象,不是单独的xib文件。
Window2
上有几个控件,主要是文本字段和按钮。我已将这些控件作为IBOutlet属性连接到我的窗口控制器的.h
文件中。我能够在实例本身中成功访问这些属性,但是我无法从另一个类或同一类中的类方法访问它们。
我考虑使用全局NSMutableDictionary来存储每个控件的指针,但这似乎是“hackish'”。互联网时间和Stack Overflow搜索没有提供任何有用的线索。
是否有某种方法可以满足良好的编程习惯,从类方法或其他类中访问Window2
的实例属性?
我在macOS 10.13.4上使用Objective-C和Xcode 9.3。
Window2Controller.h
@interface Window2Controller
@property (weak) IBOutlet NSTextField * textHostName;
@end
以下是我想要做的事情,可能不会使用代码:
OtherClass.m
#import "Window2Controller.h"
@implementation OtherClass
- (void)printTextHostNameValue
{
NSString * txtHost = [Window2Controller textHostName] stringValue];
NSLog(@"txtHost is: %@", txtHost);
}
答案 0 :(得分:0)
感谢Moritz的有用建议和咨询Apple文档,我找到了解决此问题的方法。我用[[NSApp keyWindow] delegate]
找到了我的窗口委托,我可以访问它上面的IBOutlet属性。
<强> Window2Delegate.h 强>
@interface Window2Controller
@property (weak) IBOutlet NSTextField * textHostName;
@end
之后我的新窗口是关键:
<强> OtherClass.m 强>
#import "Window2Controller.h"
@implementation OtherClass
- (void)printTextHostNameValue
{
id del = [[NSApp keyWindow] delegate];
NSString * hostText = [[del textHostName] stringValue];
NSLog(@"hostText is: %@", hostText);
}
@end