Когда я пытаюсь использовать представление выбора для выбора количества чаевых, я должен передать эту информацию контроллеру представления, который будет использоваться другой ячейкой просмотра таблицы. Когда я перезагружаю табличное представление, оно переконфигурирует обзорное устройство в ячейке, устанавливая подсказку в 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)))
}
}