Swift 如何制作两个UIPickerView';带完成按钮的按钮
我无法将“完成”按钮应用于我的选择器 我一直在研究中提供的解决方案 [https://stackoverflow.com/a/52777282/9383241][1] 但这只给出了一个示例,其中页面上有一个选择器。在我的用例中有两个选择器,我使用标记来区分它们,标记用于定义“extension MyViewController:UIPickerViewDataSource,UIPickerViewDeleteGate”中的函数,但我不确定如何使用“extension MyViewController:ToolbarPickerViewDeleteGate{”Swift 如何制作两个UIPickerView';带完成按钮的按钮,swift,Swift,我无法将“完成”按钮应用于我的选择器 我一直在研究中提供的解决方案 [https://stackoverflow.com/a/52777282/9383241][1] 但这只给出了一个示例,其中页面上有一个选择器。在我的用例中有两个选择器,我使用标记来区分它们,标记用于定义“extension MyViewController:UIPickerViewDataSource,UIPickerViewDeleteGate”中的函数,但我不确定如何使用“extension MyViewControll
我可以看到有人评论说“didTapDone和didTapCancel方法最好传入ToolbarPickerView实例;就像func didTapDone(uPicker:ToolbarPickerView)”首先,将参数添加到委托方法声明中:
protocol ToolbarPickerViewDelegate: class {
func didTapDone(pickerView: ToolbarPickerView)
func didTapCancel(pickerView: ToolbarPickerView)
}
然后,当您在doneTapped
和cancelTapped
中调用委托方法时,您也会传入self
:
@objc func doneTapped() {
self.toolbarDelegate?.didTapDone(pickerView: self)
}
@objc func cancelTapped() {
self.toolbarDelegate?.didTapCancel(pickerView: self)
}
现在,您可以在VC中检查标记:
extension MyViewController: ToolbarPickerViewDelegate {
func didTapDone(pickerView: ToolbarPickerView) {
switch pickerView.tag {
case 1:
let row = self.pickerView1.selectedRow(inComponent: 0)
self.pickerView1.selectRow(row, inComponent: 0, animated: false)
self.textField1.text = self.titles1[row]
self.textField1.resignFirstResponder()
case 2:
let row = self.pickerView2.selectedRow(inComponent: 0)
self.pickerView2.selectRow(row, inComponent: 0, animated: false)
self.textField2.text = self.titles2[row]
self.textField2.resignFirstResponder()
default:
break
}
}
func didTapCancel(pickerView: ToolbarPickerView) {
switch pickerView.tag {
case 1:
self.textField1.text = nil
self.textField1.resignFirstResponder()
case 2:
self.textField2.text = nil
self.textField2.resignFirstResponder()
default:
break
}
}
}
您甚至需要使用标记吗?您不能使用
===
相等运算符将传递到方法中的pickerview与您的两个pickerview对象进行比较吗`如果pickerview===PickerViewer{…}`
@objc func doneTapped() {
self.toolbarDelegate?.didTapDone(pickerView: self)
}
@objc func cancelTapped() {
self.toolbarDelegate?.didTapCancel(pickerView: self)
}
extension MyViewController: ToolbarPickerViewDelegate {
func didTapDone(pickerView: ToolbarPickerView) {
switch pickerView.tag {
case 1:
let row = self.pickerView1.selectedRow(inComponent: 0)
self.pickerView1.selectRow(row, inComponent: 0, animated: false)
self.textField1.text = self.titles1[row]
self.textField1.resignFirstResponder()
case 2:
let row = self.pickerView2.selectedRow(inComponent: 0)
self.pickerView2.selectRow(row, inComponent: 0, animated: false)
self.textField2.text = self.titles2[row]
self.textField2.resignFirstResponder()
default:
break
}
}
func didTapCancel(pickerView: ToolbarPickerView) {
switch pickerView.tag {
case 1:
self.textField1.text = nil
self.textField1.resignFirstResponder()
case 2:
self.textField2.text = nil
self.textField2.resignFirstResponder()
default:
break
}
}
}