使用外部源动态创建NSPopUpButton(项目数量)

时间:2018-06-20 13:29:29

标签: swift xcode macos

让我们说我有一个Txt文件,应使用以下3个条目读取该文件:

/dev/disk1s1
/dev/disk3s2
/dev/disk4s3

这3个条目中的每个条目都应作为一项“导入”到现有NSPopUpButton中。就我而言,这委派了一个人:

@IBOutlet weak var testmenu: NSPopUpButton!

从上述3条开发线创建动态菜单的下一步是什么?

@El Tomato 好的,阵列正在工作。但是不知道如何在插座中添加“驱动器”。

do {
    let file = try String(contentsOfFile: "/tmp/drives")
    let drives: [String] = file.components(separatedBy: "\n")
    print(drives)
} catch {
    Swift.print("Fatal Error: Couldn't read the contents!")
}

1 个答案:

答案 0 :(得分:2)

这很简单:

class ViewController: NSViewController {
    @IBOutlet weak var popupButton: NSPopUpButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        popupButton.menu?.removeAllItems()

        // You should get this from your file
        let fileContent = """
        /dev/disk1s1
        /dev/disk3s2
        /dev/disk4s3
        """

        for (index, drive) in fileContent.components(separatedBy: "\n").enumerated() {
            popupButton.menu?.addItem(withTitle: drive, action: #selector(ViewController.menuItemClicked(_:)), keyEquivalent: "\(index + 1)")
        }
    }

    @objc func menuItemClicked(_ sender: NSMenuItem) {
        print("\(sender.title) clicked")
    }
}

keyEquivalent是菜单项的快捷键。如果不需要,请传递一个空字符串。