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()
当我尝试使用 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()