使用NSMenuItem切换视图IBAction不起作用

时间:2014-07-21 18:27:19

标签: macos nsview nsmenu

在基于文档的Cocoa App中,我想在Document.xib中用视图填充NSBox, 通过使用NSMenuItem选择视图。但是,该框不会随视图更新。 如果我在Document.xib中插入一个按钮,该按钮与NSMenuItem相同的IBAction连接,则应用程序以预期的方式工作。

Document Window with cleared box

Document Window with selected view

我创建了树文件:   - ViewController.h   - ViewController.m   - prettyView.xib

在ViewController.m中,视图的XIB文件已初始化。

//  ViewController.m
#import "ViewController.h"
@interface ViewController ()
@end

@implementation ViewController


- (id)init
{
    if(![super initWithNibName:@"prettyView" bundle:nil]){
        return nil;
    }
    [self setTitle:@"Pretty View"];
    return self;
}

@end

Document.h包含盒子的插座和两个按钮。 一个按钮用视图填充框,另一个按钮清除框。

//  Document.h

#import <Cocoa/Cocoa.h>
@class ViewController;

@interface Document : NSDocument
@property (weak) IBOutlet NSBox *contentBox;

- (IBAction)fillBox:(id)sender;

- (IBAction)clearBox:(id)sender;

@property   ViewController  * myViewController;

@end

在Document.m中,实例化视图控制器。

//  Document.m
#import "Document.h"
#import "ViewController.h"

@interface Document ()

@end

@implementation Document

- (instancetype)init {
    self = [super init];
    if (self) {
        _myViewController = [ViewController new];

    }
    return self;
}

IBActions的方法也在Document.m中实现。

- (IBAction)fillBox:(id)sender {
    NSLog(@"Fill Box selected from %@", [sender className]);
    [self.contentBox setContentView:[self.myViewController view]];
}

- (IBAction)clearBox:(id)sender {
    NSLog(@"Clear Box selected");
    [self.contentBox setContentView:nil];
}

方法 fillBox 连接到其中一个按钮以及NSMenuItem。 按下按钮,会向控制台写入一条消息,并在框中显示视图。 选择NSMenuItem时,也会写入一条消息,但视图不会显示在框中。

1 个答案:

答案 0 :(得分:1)

IBActions不得与Document连接,而是与MainMenu.xib的First Responder连接。