2016-07-13 3 views
2

Щелчок по объекту пользовательского интерфейса NSComboBox неправильно выполняет comboBoxSelectionDidChange(...) до того, как это будет .stringValue изменений вместо того, как следует из названия. Он делает то же самое, что и .comboBoxSelectionIsChanging.swift 2 OSX Как я могу выполнить команду comboboxSelectionDidChange после изменения NSComboBox.stringValue?

Как я могу получить comboBoxSelectionDidChange(...) выполнить после NSComboBox.stringValue действительно меняется?

class ViewController: NSViewController, NSComboBoxDelegate { 
    @IBOutlet weak var comboBox: NSComboBox! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.usernameComboBox.delegate = self 
    } 

    func comboBoxSelectionDidChange(notification: NSNotification) { 
     print(usernameComboBox.stringValue) 
     // PRE-selected .stringValue = "ITEM 1" 
     // POST-selected .stringValue = "ITEM 2" 
     // selecting either item prints PRE-selected 
    } 
} 

ответ

0

Используя приведенный ниже код выполняется точно так же, как и любой другой функции NSComboBoxDelegate уведомления. Не имеет смысла, но он работает.

func comboBoxSelectionDidChange(notification: NSNotification) { 
    let currentSlection = usernameComboBox.stringValue  
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), { 
     while true { 
      if self.usernameComboBox.stringValue != currentSlection { 
       print(self.usernameComboBox.stringValue) 
       break 
      } 
     } 
    }) 
} 
1

Вот более короткий путь:

 func comboBoxSelectionDidChange(notification: NSNotification) { 

    guard let stringValue = usernameComboBox.objectValueOfSelectedItem as? String else { return } 
    print(stringValue) 
} 
+0

Спасибо! На всякий случай, любые другие динозавры, такие как я, используя Objective-c, это NSLog (@ "% @", _myComboBox.objectValueOfSelectedItem); –