簡體   English   中英

makeTouchBar() 不被稱為 Mac Catalyst touchbar

[英]makeTouchBar() not being called Mac Catalyst touchbar

希望你能幫上忙,我對此有點生氣。 我有一個 Objective-c iOS 項目,我正在使用 Catalyst 移植到頂級 MacOS 上。 在我必須添加 Touchbar 支持之前,一切都很順利。

我有我的主 viewController 的快速擴展,我正在為 NSTouchBarDelegate 實現所需的委托方法

問題是,在 Swift 擴展中,從未調用過makeTouchBar

@objc override open func makeTouchBar() -> NSTouchBar? {
     let touchBar = NSTouchBar()
      touchBar.delegate = self
      touchBar.defaultItemIdentifiers = [...identifiers...]
      return touchBar
    }

或者只是在原始的 Obj-C viewController 中:

- (NSTouchBar *)makeTouchBar {
    return ...;
}

我遵循了多個教程,這些教程基本上都說“覆蓋 makeTouchBar 並且它會神奇地工作”。 我成功地將工具欄和菜單添加到應用程序中,所以我有點困惑正在發生的事情以及為什么系統永遠不會調用此方法。

任何幫助將非常感激

干杯埃米爾

我有一個類似的問題,這是由我的 SceneDelegate 實現 NSTouchBarDelegate 引起的。 相反,我應該讓我的 AppDelegate 實現 NSTouchBarDelegate。

這是一個將 Touchbar 添加到 SwiftUI Catalyst 13.0 應用程序的工作示例:

//
//  TouchbarDelegate.swift
//  TenderHub
//
//  Created by Peter Chapman on 5/08/20.
//  Copyright © 2020 Conglomo Limited. All rights reserved.
//

import UIKit

#if targetEnvironment(macCatalyst)
extension NSTouchBarItem.Identifier {
    static let play = NSTouchBarItem.Identifier("play")
    static let trash = NSTouchBarItem.Identifier("trash")
}

extension AppDelegate: NSTouchBarDelegate {
    
    override func makeTouchBar() -> NSTouchBar? {
        let touchBar = NSTouchBar()
        touchBar.delegate = self
        
        touchBar.defaultItemIdentifiers = [
            .flexibleSpace,
            .play,
            .trash,
            .flexibleSpace
        ]
        
        return touchBar
    }
    
    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItem.Identifier) -> NSTouchBarItem? {
        let touchBarItem: NSTouchBarItem?
        
        switch identifier {
        case .play:
            guard let image = UIImage(systemName: "play") else { return nil }
            touchBarItem = NSButtonTouchBarItem(identifier: identifier,
                                                image: image,
                                                target: UIApplication.shared.openSessions.first?.scene?.delegate,
                                                action: #selector(SceneDelegate.play(_:)))
            
        case .trash:
            guard let image = UIImage(systemName: "trash") else { return nil }
            touchBarItem = NSButtonTouchBarItem(identifier: identifier,
                                                image: image,
                                                target: UIApplication.shared.openSessions.first?.scene?.delegate,
                                                action: #selector(SceneDelegate.trash(_:)))
        default:
            touchBarItem = nil
        }
        
        return touchBarItem
    }
}
#endif


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM