tableview 单元格中的 pickerview 不起作用

pickerview in tableview cell doesn't work

当我尝试使用 pickerview 来 select 小费时,我必须将该信息中继到视图控制器以供另一个 tableview 单元格使用。当我重新加载 tableview 时,它会重新配置单元格中的 pickerview,在选择另一个数量时将提示设置为 0。如果我做到这一点,那么 pickerview 仅通过 bool 语句配置一次,该语句仅在第一次配置时为真,pickerview 在第一个 selection 后冻结,从而无法进行第二次调整。当我尝试将 "selectRow" 函数设置为 selected 行并在 selected 行上重新配置时,它不适用于顶部和底部字段相互覆盖并且更新提示的能力停止工作。我不知道还有什么其他选择可以让它发挥作用。看来这应该不难。这是一些代码:

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)))
    }
}

你需要

let pickerView = UIPickerView()

和实例 var ,所以它的委托和数据源被保留

你也应该打电话给

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

一旦不向 tableCell 添加多个选择器,以及当您需要刷新调用时

pickerView.reloadAllComponents()