首页 > 解决方案 > 二级菜单 NSView 链接 NSMenuItem 问题

问题描述

一级菜单和二级菜单通过NSmenuItem的title调用数组一一匹配,一级菜单也能正常显示数据。但是一旦二级菜单进入NSView,只有第一项会显示数据,其余都是空白,尝试了很多方法,都没有成功,请指导我,如何处理?

更新方法:

    func updateData() {
        for city in cites {
            let airQualityApi = AirQualityApi()
            airQualityApi.fetchData(query: city, success: {airQuality in
                if let airQualityMenyItem = self.statusMenu.item(withTitle: city){
                    airQualityMenyItem.title = airQuality.description
                    self.airQualityDetailView.update(airQuality: airQuality)
                }
            })
        }
    }

秒级 NSView 更新方法:

    func update(airQuality: AirQuality) {
        DispatchQueue.main.sync {
            self.cityName.stringValue = airQuality.city
            self.airQuality.intValue = Int32(airQuality.aqi)
            
        }

    }

添加 NSMenuItem:

override func awakeFromNib() {
        updateData()
        let icon = NSImage(named: "icon")
        icon?.isTemplate = true
        if let button = statusItem.button {
            button.image = icon
        }
        statusItem.menu = statusMenu
        
        //let editMenuItem = NSMenuItem()
        //editMenuItem.title = "showAqi"
        for i in 0 ... cites.count - 1 {
            let mainMenu = NSMenuItem(title: cites[i], action: .none, keyEquivalent: "")
            statusMenu.insertItem(mainMenu, at: i)
            let sub = NSMenu()
            let subMenu = NSMenuItem(title: mainMenu.title, action: .none, keyEquivalent: "")
            subMenu.view = airQualityDetailView
            //print(subMenu.title)
            statusMenu.setSubmenu(sub, for: mainMenu)
            sub.addItem(subMenu)
            
            //sub.insertItem(subMenu, at: 0)
            
        }
        
    }

你可以在这里看到完整的代码 GitHub上的整个项目代码

非常感谢你

标签: swiftnsviewnsmenuitem

解决方案


推荐阅读