Как узнать, какой селектор NSCombobox вызывает делегата

У меня есть следующий код, написанный в SWIFT для приложения OS X, код работает нормально (NSComboBox доступен только для выбора, а не для редактирования)

У меня есть эти два IBOutlet projNewProjType и projNewRouter, когда я меняю выбор любого из NSComboBox, я вижу правильное выбранное значение индекса и значение строки, но как проверить, что возвращаемое значение индекса из projNewProjType НЕ projNewRouter в comboBoxSelectionDidChange()

import Cocoa
class NewProjectSetup: NSViewController, NSComboBoxDelegate {
  let comboxProjValue: [String] = [“No”,”Yes”]
  let comboxRouterValue: [String] = ["No","Yes"]

  @IBOutlet weak var projNewProjType: NSComboBox!
  @IBOutlet weak var projNewRouter: NSComboBox!


  @IBAction func btnAddNewProject(sender: AnyObject) {
    print(“Add New Button Pressed!”)
  }

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

  override func viewDidLoad() {
    super.viewDidLoad()
    addComboxValue(comboxProjValue,projNewProjType)
    addComboxValue(comboxRouterValue,projNewRouter)

    self.projNewProjType.selectItemAtIndex(0)
    self.projNewRouter.selectItemAtIndex(0)

    self.projNewProjType.delegate = self
    self.projNewRouter.delegate = self
  }


  func comboBoxSelectionDidChange(notification: NSNotification) {
    let comboBox: NSComboBox = (notification.object as? NSComboBox)!

    print("comboBox comboBox: \(comboBox)")
    /* This printed “<NSComboBox: 0x6000001e1a00>”*/

    print("comboBox objectValueOfSelectedItem: \(comboBox.objectValueOfSelectedItem)")
    /* This printed the correct selected String value */

    print("comboBox indexOfSelectedItem: \(comboBox.indexOfSelectedItem)")
    /* This printed the correct selected Index value */        
  }

  /* Add value to Combo box */
  func addComboxValue(myVal:[String],myObj:AnyObject){
    let myValno: Int = myVal.count
    for i in 0..<myValno{
        myObj.addItemWithObjectValue(myVal[i])
    }
  }
}

person David Evony    schedule 22.01.2016    source источник


Ответы (2)


Вы можете установить идентификаторы для ваших NSComboBox в IB. Выберите поле со списком и выберите инспектор удостоверений и идентификатор имени. Тогда вы можете сделать так:

if comboBox.identifier == "someIdentifier" {
    // Do something
}
person Prontto    schedule 22.01.2016
comment
Ой! Я плохой. Я установил свой идентификатор в неправильный раздел в разделе «Доступность», это объясняет, почему я вижу странную строку [_NS: 179], когда пытаюсь напечатать .identifier. После того, как я исправил его и поместил в раздел Identity, теперь я могу использовать .identifier для проверки селектора. Спасибо - person David Evony; 22.01.2016

Вы уже знаете адреса двух ваших выходов NSComboBox и знаете адрес, из которого NSComboBox вызвал срабатывание этого уведомления, так почему бы не сделать что-то вроде:

func comboBoxSelectionDidChange(notification: NSNotification) {
    let comboBox: NSComboBox = (notification.object as? NSComboBox)!

    if comboBox == self.projNewProjType
    {
        print("selection changed via self.projNewProjType")
    }
    if comboBox == self.projNewRouter
    {
        print("selection changed via self.projNewRouter")
    }
person Michael Dautermann    schedule 22.01.2016