2016-01-22 2 views
2

я следующий код, написанный в SWIFT для OS X App, код работает отлично (NSComboBox отборное способны только не редактируется)Как узнать, какой селектор NSCombobox вызова делегата

У меня есть эти два IBOutlet projNewProjType и projNewRouter, когда я изменить выбор любой из NSComboBox, я могу видеть, правильно выбранное значение индекса и значение String, но как проверить, что возвращаемое значение индекса от 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]) 
    } 
    } 
} 

ответ

2

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

if comboBox.identifier == "someIdentifier" { 
    // Do something 
} 
+0

Ooop! Я плохой. Я установил свой идентификатор в неправильный раздел в разделе «Доступность», это объясняет, почему я вижу странную строку [_NS: 179], когда я пытался распечатать идентификатор. После того, как я исправлю его и поставлю в разделе Identity, теперь я могу использовать .identifier для проверки селектора. спасибо –

3

Вы уже знаете, что добавить resses ваших двух точек 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") 
    }