我正在嘗試以編程方式在視窗上創建一個 NSToolbar 但它似乎沒有呼叫該itemForItemIdentifier方法(我使用了斷點并且它沒有做任何事情),如果我洗掉該方法 Xcode 抱怨它“沒有實作所有必需的方法”,但是當我將其添加回來時,它什么也沒說。即使我return nil使用該方法,它也會呈現專案
我使用的是 macOS Monterey 和 Xcode 13.3
代碼:
import Cocoa
class MainWindowController: NSWindowController {
override func windowDidLoad() {
super.windowDidLoad()
let toolbar = NSToolbar()
toolbar.delegate = self
toolbar.displayMode = .default
self.window?.toolbar = toolbar
}
}
extension MainWindowController: NSToolbarDelegate {
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [
.toggleSidebar,
.print
]
}
func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
return NSToolbarItem(itemIdentifier: itemIdentifier)
}
func toolbarWillAddItem(_ notification: Notification) {
print("toolbarWillAddItem")
}
func toolbarDidRemoveItem(_ notification: Notification) {
print("toolbarDidRemoveItem")
}
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [
.toggleSidebar,
.print
]
}
func toolbarSelectableItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return []
}
}
截屏:

uj5u.com熱心網友回復:
itemForItemIdentifier:willBeInsertedIntoToolbar:僅對非庫存工具列專案呼叫該方法。現在你只有 2 個工具列項,一個是切換側邊欄,一個是列印。NSToolbar不需要呼叫itemForItemIdentifier:willBeInsertedIntoToolbar:這些專案,因為它自己處理創建它們。我的 Swift 有點生疏,但添加如下內容應該會導致呼叫該委托方法:
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) ->
[NSToolbarItem.Identifier] {
return [
.toggleSidebar,
.print,
NSToolbarItem.Identifier("myOwn"),
]
}
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) ->
[NSToolbarItem.Identifier] {
return [
.toggleSidebar,
.print,
NSToolbarItem.Identifier("myOwn"),
]
}
然后應該呼叫該方法,傳遞NSToolbarItem.Identifier("myOwn")給您一個機會來創建與該識別符號相對應的工具列項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/511261.html
標籤:迅速苹果系统可可
