2016-08-20 102 views
0

我只是喜欢玩编码爱好,所以可能是noob问题;Objective-c - 其他类的控制插座

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

例如

我在mainclass的按钮(IBAction为),并在子类中一个文本字段(IBOutlet中)。我想通过点击main中的按钮来设置文本字段的stringvalue。

我已经搜索了很多最后的日子,但只是不明白。 (或者只需要在正确的方向推)

编辑JingJingTao的回答后:

我使用的控制拖动功能打开第二个窗口。 我试了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 
+0

你不能。每个场景都是一个单独的笔尖。 – matt

+0

您需要对拥有插座的类的实例进行引用。但是,这两个观点同时在屏幕上?或者你真的想在某处设置一些标志/状态以便以后使用... – Wain

+0

它们同时在屏幕上 –

回答

0

更新:

我已经把它贴的是什么样子的故事板的第一个建议两张截图,

1)添加视图到您的ViewController,设置类顶部“YourView”的权利,“YourView”只是一个NSView,添加一个文本字段并将其连接起来。 myview1

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

让我知道是否有任何问题。

你只需要把文本框放在你的子类的公共接口中,这样你就可以在你的主类中访问它,尽管它听起来像你使用继承,我不认为你需要,但这是另一个话题: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"; 
} 

在子类。h

@interface Subclass : NSObject 

@property (nonatomic) IBOutlet UITextfield *textfield; 

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

+0

textfield is not't responding ..我已将我的课程放在我的帖子上方 –

+0

您如何在同一时间将两个视图控制器一起显示?从我可以看到你是否初始化另一个父类中的两个视图控制器?因此,有几条建议,1)如果可能的话,将ViewController2更改为一个视图,即NSView,然后将其作为子视图添加到ViewController1,这很容易通过故事板中的容器来实现。 2)如果你需要两个viewcontroller,那么你需要添加ViewController2作为一个childviewcontroller,然后将它的视图添加到'ViewController'作为子视图。如有需要,我可以提供代码示例。 – JingJingTao

+0

我只是在故事板中添加了一个新的viewcontroller,从该视图控制拖动到mainviewcontroller中的按钮。之后,我将.h和.m类分配给它。我不需要2个视图控制器。所以,如果你可以给我第一个建议的代码示例,那就太好了! –