NSToolbarDelegate Error?



Im正在用程序创建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的说法,没有必要的方法,那么这里出了什么问题?

为了使工具栏以NSWindowController子类作为其委托来工作,您必须声明它符合NSToolbarDelegate协议:

@interface MyController : NSWindowController <NSToolbarDelegate>

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

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

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

根据提供的好答案,Swift版本的需要方法:

func toolbar(_ toolbar: NSToolbar,
               itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier,
               willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem?
    
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier]
    
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier]

相关内容

  • 没有找到相关文章

最新更新