在基于文档的Cocoa App中,我想在Document.xib中用视图填充NSBox, 通过使用NSMenuItem选择视图。但是,该框不会随视图更新。 如果我在Document.xib中插入一个按钮,该按钮与NSMenuItem相同的IBAction连接,则应用程序以预期的方式工作。
我创建了树文件: - 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时,也会写入一条消息,但视图不会显示在框中。
答案 0 :(得分:1)
IBActions不得与Document连接,而是与MainMenu.xib的First Responder连接。