首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSTouchBar集成不调用

NSTouchBar集成不调用
EN

Stack Overflow用户
提问于 2019-10-22 22:24:48
回答 1查看 157关注 0票数 1

我正在将TouchBar支持集成到我的应用程序中。我使用了Rey Wenderlich的方法,并实现了以下所有内容:

如果self.touchBarArray被填充,makeTouchBar()方法将返回NSTouchBar对象。如果我打印出一些测试,identifiers对象就会被填充并工作。

不起作用的是makeItemForIdentifier方法没有被触发。因此,项目不会被创建,并且TouchBar仍然是空的。

Strange行为:如果我在返回工作的NSTouchBar对象之前添加print(touchBar)和断点,那么TouchBar就会以应有的方式呈现(同时也会触发makeItemForIdentifier函数)。即使它在几秒钟后消失..。也很奇怪。

代码语言:javascript
复制
@available(OSX 10.12.2, *)
extension ViewController: NSTouchBarDelegate {
    override func makeTouchBar() -> NSTouchBar? {
        if(self.touchBarArray.count != 0) {
            let touchBar = NSTouchBar()
            touchBar.delegate = self
            touchBar.customizationIdentifier = NSTouchBarCustomizationIdentifier("com.TaskControl.ViewController.WorkspaceBar")
            var identifiers: [NSTouchBarItemIdentifier] = []
            for (workspaceId, _) in self.touchBarArray {
                identifiers.append(NSTouchBarItemIdentifier("com.TaskControl.ViewController.WorkspaceBar.\(workspaceId)"))
            }
            touchBar.defaultItemIdentifiers = identifiers
            touchBar.customizationAllowedItemIdentifiers = identifiers
            return touchBar
        }
        return nil
    }

    func touchBar(_ touchBar: NSTouchBar, makeItemForIdentifier identifier: NSTouchBarItemIdentifier) -> NSTouchBarItem? {
        if(self.touchBarArray.count != 0) {
            for (workspaceId, data) in self.touchBarArray {
                if(identifier == NSTouchBarItemIdentifier("com.TaskControl.ViewController.WorkspaceBar.\(workspaceId)")) {
                        let saveItem = NSCustomTouchBarItem(identifier: identifier)
                        let button = NSButton(title: data["name"] as! String, target: self, action: #selector(self.touchBarPressed))
                        button.bezelColor = NSColor(red:0.35, green:0.61, blue:0.35, alpha:1.00)
                        saveItem.view = button
                        return saveItem
                }
            }
        }
        return nil
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-24 23:00:34

self.view.window?.makeFirstResponder(self) in viewDidLoad()确实解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58513052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档