окно выбора в ячейке таблицы не работает - PullRequest
0 голосов
/ 07 марта 2019

Когда я пытаюсь использовать представление выбора для выбора количества чаевых, я должен передать эту информацию контроллеру представления, который будет использоваться другой ячейкой просмотра таблицы. Когда я перезагружаю табличное представление, оно переконфигурирует обзорное устройство в ячейке, устанавливая подсказку в 0, когда было выбрано другое количество. если я сделаю так, чтобы средство выбора настраивалось только один раз с помощью оператора bool, который имеет значение true только при первой настройке, представление средства выбора замерзает после первого выбора, что делает невозможным второе изменение. Когда я попытался установить функцию «selectRow» в качестве выбранной строки и перенастроить выбранную строку, она не работает, когда верхнее и нижнее поля переписываются друг на друга, и возможность обновления подсказки перестает работать. Я понятия не имею, какие есть еще варианты, чтобы заставить его работать. Похоже, это не должно быть так сложно. Вот некоторый код:

private func configurePickerView() {
    let pickerView = UIPickerView()
    pickerView.delegate = self
    pickerView.dataSource = self
    pickerView.selectRow(selectedRow, inComponent: 0, animated: false)
    contentView.addSubview(pickerView)
    pickerView.translatesAutoresizingMaskIntoConstraints = false
    pickerView.widthAnchor.constraint(equalTo: contentView.widthAnchor, multiplier: 0.25).isActive = true
    guard let orderView = orderView else { return }
    pickerView.rightAnchor.constraint(equalTo: orderView.rightAnchor, constant: -20).isActive = true
    pickerView.centerYAnchor.constraint(equalTo: orderView.centerYAnchor).isActive = true
    //let height = getSize(large: 45, medium: 45, small: 45)
    pickerView.heightAnchor.constraint(equalToConstant: 70).isActive = true
}


func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return tipArray.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return tipArray[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    selectedRow = row
    let tipAsInt = switchStatement(row)
    delegate?.reloadData(tipAsInt)
}

private func switchStatement(_ row: Int) -> Int {
    switch row {
    case 0: return Int(round(0 * Double(subTotal)))
    case 1: return Int(round(0.05 * Double(subTotal)))
    case 2: return Int(round(0.1 * Double(subTotal)))
    case 3: return Int(round(0.15 * Double(subTotal)))
    case 4: return Int(round(0.2 * Double(subTotal)))
    default: return Int(round(0.25 * Double(subTotal)))
    }
}

1 Ответ

1 голос
/ 07 марта 2019

Вам нужно сделать

let pickerView = UIPickerView()

и экземпляр var, чтобы его делегат и источник данных были сохранены

Также вы должны вызвать

func configurePickerView() { // call it inside awakeFromNib or init

один раз, чтобы недобавьте несколько сборщиков в tableCell и, когда вам нужно обновить вызов

pickerView.reloadAllComponents()
...