gpt4 book ai didi

objective-c - swift/Objective-C : How to call a view-controller-method from another class

转载 作者:行者123 更新时间:2023-11-28 05:34:40 24 4
gpt4 key购买 nike

假设我有一个名为 FooController 的类。它将在某个时间点调用第二个类 BarController 所拥有的方法 bar(str: String)BarControllerNSViewController 的子类,并且有一个 IBOutlet。此 socket 连接到 NSButton

bar 只是将按钮的文本更改为一些字符串,例如“Example”。

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

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

我的问题是,新实例未连接到接口(interface),因此 IBOutlet 变为 nil

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

最佳答案

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

关于objective-c - swift/Objective-C : How to call a view-controller-method from another class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24700558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com