2016-01-22 34 views
1

我是OS X应用程序开发的新手。我设法建立了NSComboBox(可选择,不可编辑),我可以得到它indexOfSelectedItem在行动按钮点击,工作正常。更改NSComboBox getGet值

如何检测更改的值?当用户改变他们的选择时,我将使用什么样的功能来检测新选定的索引?

我试过使用NSNotification,但没有通过新的更改值,始终是加载时的默认值。这是因为我将postNotificationName放置在错误的位置,或者有其他方法用于获取更改的值?

我试着搜索网络,视频,教程,但主要是为Objective-C编写的。在SWIFT中我无法找到任何答案。

import Cocoa 

class NewProjectSetup: NSViewController { 

    let comboxRouterValue: [String] = ["No","Yes"] 

    @IBOutlet weak var projNewRouter: NSComboBox! 

    @IBAction func btnAddNewProject(sender: AnyObject) { 
     let comBoxID = projNewRouter.indexOfSelectedItem 
     print(“Combo Box ID is: \(comBoxID)”) 
    } 

    @IBAction func btnCancel(sender: AnyObject) { 
     self.dismissViewController(self) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     addComboxValue(comboxRouterValue,myObj:projNewRouter) 
     self.projNewRouter.selectItemAtIndex(0) 

     let notificationCenter = NSNotificationCenter.defaultCenter() 
     notificationCenter.addObserver(
     self, 
     selector: “testNotication:”, 
     name:"NotificationIdentifier", 
     object: nil) 

     NSNotificationCenter.defaultCenter().postNotificationName("NotificationIdentifier", object: projNewRouter.indexOfSelectedItem) 
} 

func testNotication(notification: NSNotification){ 
    print("Found Combo ID \(notification.object)") 
} 

func addComboxValue(myVal:[String],myObj:AnyObject){ 
    let myValno: Int = myVal.count 
    for var i = 0; i < myValno; ++i{ 
     myObj.addItemWithObjectValue(myVal[i]) 
    } 
} 

}

+0

您需要实现NSComboBoxDelegate并使用方法 'comboB oxSelectionDidChange()'知道弹出列表选择已更改 –

+0

顺便说一句,您应该习惯Swift语法的新循环。对于var循环将不再可用在Swift3中https://github.com/apple/swift-evolution/blob/master/proposals/0007-remove-c-style-for-loops.md –

+0

哦,是的,我将需要拿起原来的风格。 –

回答

3

需要定义一个委托实现该NSComboBoxDelegate协议组合框,然后用该方法comboBoxSelectionDidChange(_:)

最简单的方法是您NewProjectSetup类实现委托,如:

class NewProjectSetup: NSViewController, NSComboBoxDelegate { ... etc 

然后在viewDidLoad中,还包括:

self.projNewRouter.delegate = self 
// self (ie. NewProjectSetup) implements NSComboBoxDelegate 

然后你就可以拿起变化:

func comboBoxSelectionDidChange(notification: NSNotification) { 
    print("Woohoo, it changed") 
} 
+0

非常好!我遵循你的指示。它正在工作。我删除了“let notfication = Notification .....”,并删除了“NSNotificationCenter.defaultCenter()。postNotificationName”。我使用print(“Woohoo,它改变了\(self.projNewRouter.indexOfSelectedItem)”)的输出。它现在是完美的。谢谢 –

+0

无后顾之忧。您应该通过将答案标记为已接受来关闭现在。 – Michael