4

我以编程方式创建一个 NSWindowController 及其窗口。所以我创建了一个简单的 NSToolbar:

NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier:@"PreferencesToolbar"];

[toolbar setDisplayMode:NSToolbarDisplayModeIconAndLabel];
[toolbar setAllowsUserCustomization:NO];
[toolbar setAutosavesConfiguration:NO];

[self.window setToolbar:toolbar];

[toolbar release];

一切正常,但是当我添加 [toolbar setDelegate:self];

我收到以下错误:

错误:无效委托(未实现所有必需的方法),因此无法使用!(要调试,请在 NSToolbarError 中添加断点

根据 NSToolbarDelegate 没有必需的方法,那么这里出了什么问题?

4

1 回答 1

10

为了使工具栏与您的NSWindowController子类作为其委托一起使用,您必须将其声明为符合NSToolbarDelegate协议:

@interface MyController : NSWindowController <NSToolbarDelegate>

此外,从doc中,您必须确保某些实现,即使它们是可选的,因为您以编程方式创建了工具栏。他们是 :

-(NSToolbarItem *)toolbar:(NSToolbar *)toolbar
    itemForItemIdentifier:(NSString *)itemIdentifier
willBeInsertedIntoToolbar:(BOOL)flag;

-(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar;

-(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar;

重要虽然此方法在 NSToolbarDelegate 协议中标记为 @optional ,但如果关联的工具栏是以编程方式创建的,则必须实现它。在 Interface Builder 中创建的工具栏可以实现此方法来增强功能。

于 2012-02-27T15:16:06.650 回答