2016-01-22 4 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 loops больше не будет доступно в 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 notification = Notification .....», а также удалил «NSNotificationCenter.defaultCenter(). PostNotificationName». Выход i использует print («Woohoo, он изменил \ (self.projNewRouter.indexOfSelectedItem)»). Это префект сейчас. Спасибо –

+0

Не беспокойтесь. Вы должны закрыть это, отметив ответ как принятый. – Michael

 Смежные вопросы

  • Нет связанных вопросов^_^