假设我有一个名为FooController
的班级。它会在某个时间点调用第二个类bar(str: String)
的方法BarController
owend。 BarController
是NSViewController
的子类,并且IBOutlet
。此插座已连接到NSButton
。
bar
只需将按钮的文字更改为某些字符串,例如"示例"。
我的第一个方法是创建一个BarController
的新实例,然后调用该方法。
var bc = BarController()
bc.bar("Example")
我的问题是,新实例未连接到界面,因此IBOutlet
变为nil
。
func bar(str: String) {
myButton.title = str // myButton is nil
}
答案 0 :(得分:2)
1)将按钮连接到应用程序启动时实例化的类中的属性,例如AppDelegate。我们假设您创建了一个名为aButton的属性。 --->因此,您可以跟踪对象
AppDelegate.h
@interface AppDelegate
@property(weak) IBOutlet NSButton *aButton;
@end
AppDelegate.m
@implementation AppDelegate
-(void)applicationDidFinishLaunching:(NSNotification*)notification
{
BarController* controller = [BarController controllerForButton:aButton];
}
@end
2)创建BarController对象时,创建一个将属性_button设置为aButton的类方法。 - >因此,您的对象知道按钮的地址。
BarController.h
@interface BarController
{
NSButton *_button;
}
@end
BarController.m
@implementation BarController
+(BarController*)controllerForButton:(NSButton*)button{
return[[BarController alloc] initWithButton:button];
}
-(void)initWithButton:(NSButton*)button{
self = [super init];
if (self)
{
_button = button;
}
}