Я недавно портировал приложение на Ma c Catalyst, и я пытаюсь настроить панель инструментов моего приложения, чтобы по существу отражать приложения MacOS News и Stocks, где у них есть кнопка «Назад» и кнопка «Поделиться» на панели инструментов. См. Ниже:
Желаемый результат:
Этот код работает, когда я добавляю его в AppDelegate, но не когда я добавляю его в обычный класс ViewController.
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
#if targetEnvironment(macCatalyst)
UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.forEach { windowScene in
if let titlebar = windowScene.titlebar {
let toolbar = NSToolbar(identifier: "testToolbar")
titlebar.toolbar = toolbar
toolbar.delegate = self
titlebar.titleVisibility = .hidden
}
}
#endif
}
}
#if targetEnvironment(macCatalyst)
private let SettingsIdentifier = NSToolbarItem.Identifier(rawValue: "SettingsButton")
private let TitleIdentifier = NSToolbarItem.Identifier(rawValue: "Title")
private let NavigationIdentifier = NSToolbarItem.Identifier(rawValue: "BackButton")
extension ViewController: NSToolbarDelegate {
func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {
if (itemIdentifier == NavigationIdentifier) {
let barButton = UIBarButtonItem(image: UIImage(systemName: "chevron.left"), style: .done, target: self, action: #selector(test))
let button = NSToolbarItem(itemIdentifier: itemIdentifier, barButtonItem: barButton)
return button
}
if (itemIdentifier == SettingsIdentifier) {
let barButton = UIBarButtonItem(image: UIImage(systemName: "ellipsis.circle"), style: .done, target: self, action: #selector(test))
let button = NSToolbarItem(itemIdentifier: itemIdentifier, barButtonItem: barButton)
return button
}
if (itemIdentifier == TitleIdentifier) {
let barButton = UIBarButtonItem(title: "My App", style: .plain, target: self, action: nil)
let button = NSToolbarItem(itemIdentifier: itemIdentifier, barButtonItem: barButton)
return button
}
return nil
}
func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return [NavigationIdentifier, NSToolbarItem.Identifier.flexibleSpace, TitleIdentifier, NSToolbarItem.Identifier.flexibleSpace, SettingsIdentifier]
}
func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
return toolbarDefaultItemIdentifiers(toolbar)
}
@objc func test(){
print("test")
}
}
#endif
Если у кого-то есть какие-либо идеи о том, как исправить или даже улучшить мою реализацию, я буду благодарен.
Спасибо!