Swift / Objective-C:如何从另一个类调用view-controller-method

时间:2014-07-11 14:49:31

标签: objective-c cocoa interface-builder swift iboutlet

假设我有一个名为FooController的班级。它会在某个时间点调用第二个类bar(str: String)的方法BarController owend。 BarControllerNSViewController的子类,并且IBOutlet。此插座已连接到NSButton

bar只需将按钮的文字更改为某些字符串,例如"示例"。

我的第一个方法是创建一个BarController的新实例,然后调用该方法。

var bc = BarController()
bc.bar("Example")

我的问题是,新实例未连接到界面,因此IBOutlet变为nil

func bar(str: String) {
    myButton.title = str // myButton is nil
}

1 个答案:

答案 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;
    }
}