2016-01-22 88 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