Objective-c - 来自其他班级

时间:2016-08-20 12:05:36

标签: objective-c

我只是喜欢为编程做爱,所以可能是一个noob问题;

我有一个简单的MacOS故事板,有2个视图。两者都有自己的类(主类和子类)。如何从主类中控制子类中的插座?

例如

我在主类中有一个按钮(IBAction),在子类中有一个textfield(IBOutlet)。我想通过单击main中的按钮为文本字段设置stringvalue。

我最近几天搜索了很多但是没有得到它。 (或者只是需要向正确的方向推进)

在JingJingTao的回答之后编辑:

我使用control-drag功能打开第二个窗口。 我试过了JingJingTao给出的代码,但是textfield没有响应这个动作。 我的课程现在看起来像这样:

ViewController.h

#import <Cocoa/Cocoa.h>

@interface ViewController : NSViewController

- (IBAction)newText:(id)sender;

@end

ViewController.m

#import "ViewController.h"
#import "ViewController2.h"


@interface ViewController ()

@property (nonatomic) ViewController2 *subclass;

@end

@implementation ViewController


- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)setRepresentedObject:(id)representedObject {
    [super setRepresentedObject:representedObject];
}

- (void)newText:(id)sender {
    self.subclass.textField.stringValue = @"button pressed";
}


@end

ViewController2.h

#import "ViewController.h"

@interface ViewController2 : ViewController

@property (nonatomic) IBOutlet NSTextField *textField;

@end

ViewController2.m

#import "ViewController2.h"

@interface ViewController2 ()

@end

@implementation ViewController2

- (void)viewDidLoad {
    [super viewDidLoad];


}

@end

1 个答案:

答案 0 :(得分:0)

<强>更新

我在第一个建议的故事板中附上了两张截图:

1)向ViewController添加一个视图,将右上角的类设置为'YourView','YourView'只是一个NSView,为它添加一个文本字段并将其连接起来。 myview1

2)将YourView作为属性添加到ViewController,即@property (nonatomic) IBOutlet NSView *yourView;并将其挂钩。 myview2

如果有任何问题,请告诉我。

你只需要将textfield放在你的子类的公共接口中,这样你就可以在你的主类中访问它,虽然听起来好像你正在使用继承而我认为你不需要但是那是另一个话题:D。

示例:

在MainClassViewController.m中

@interface MainClassViewController ()

@propert (nonatomic) Subclass *subclass;

@end

@implementation MainClassViewController

// I guess you already add your subclass to the main viewcontroller because they display on the same screen.

- (void)yourButtonTapMethod {
     self.subclass.textfield.text = @"Your value";
}

在Subclass.h中

@interface Subclass : NSObject

@property (nonatomic) IBOutlet UITextfield *textfield;

我使用Cocoa Touch代替Cocoa,所以也许它是NSTextfield。如果这不能回答你的问题,请告诉我,祝你好运。