Как реализовать источник данных для нескольких полей со списком в одном контроллере представления

У меня есть 2 поля со списком, которые используют тот же словарь, что и источник данных. в первом поле со списком будут отображаться ключи, а во втором - значения.

Сначала мне нужно немного помочь с реализацией методов делегата источника данных; пожалуйста, смотрите листинг кода ниже. соответствующие коробки - этажи Box и комнаты Box. Не обращайте внимания на остальные 2, так как они будут заполнены локальной переменной или интерфейсом. Также, скажем, что для первого этажа [key = 0] у меня есть 3 комнаты [value = 3], как мне взять значение 3 и превратить его в 3 элемента внутри roomsBox; Так что каждый раз, когда пол меняет, в коробке для комнат появляется соответствующее количество предметов (если это имеет смысл). Я действительно ценю вашу помощь и благодарю вас.

class RoomAndAlarmTypesVC: NSViewController, NSComboBoxDelegate, NSComboBoxDataSource {

//MARK: - Properties

private var floorsAndRooms = [String: String]()

@IBOutlet private weak var floorsBox: NSComboBox!

@IBOutlet private weak var roomsBox: NSComboBox!

@IBOutlet private weak var roomType: NSComboBox!

@IBOutlet private weak var alarmType: NSComboBox!

//MARK: - Actions

override func viewDidLoad() {
    super.viewDidLoad()
    floorsAndRooms = representedObject as! [String : String]
    floorsBox.usesDataSource = true
    roomsBox.usesDataSource = true
    roomType.usesDataSource = true
    alarmType.usesDataSource = true

    floorsBox.delegate = self
    roomsBox.delegate = self
    roomType.delegate = self
    alarmType.delegate = self

    floorsBox.dataSource = self
    roomsBox.dataSource = self
    roomType.dataSource = self
    alarmType.dataSource = self
}
@IBAction private func setTheSystem(_ sender: NSButton) {

}

func numberOfItems(in comboBox: NSComboBox) -> Int {
    what do i do here?
}

func comboBox(_ comboBox: NSComboBox, objectValueForItemAt index: Int) -> Any? {
    same here?
}

}

1 ответ

Решение

Используйте оператор switch на основе отправителя (ваш параметр comboBox)

например:

switch comboBox
{
    case floorsBox :  return // the data for floors 
    case roomsBox :  return // the data for rooms 
    ...
}
Другие вопросы по тегам