Swift 如何制作两个UIPickerView';带完成按钮的按钮

Swift 如何制作两个UIPickerView';带完成按钮的按钮,swift,Swift,我无法将“完成”按钮应用于我的选择器 我一直在研究中提供的解决方案 [https://stackoverflow.com/a/52777282/9383241][1] 但这只给出了一个示例,其中页面上有一个选择器。在我的用例中有两个选择器,我使用标记来区分它们,标记用于定义“extension MyViewController:UIPickerViewDataSource,UIPickerViewDeleteGate”中的函数,但我不确定如何使用“extension MyViewControll

我无法将“完成”按钮应用于我的选择器

我一直在研究中提供的解决方案 [https://stackoverflow.com/a/52777282/9383241][1] 但这只给出了一个示例,其中页面上有一个选择器。在我的用例中有两个选择器,我使用标记来区分它们,标记用于定义“extension MyViewController:UIPickerViewDataSource,UIPickerViewDeleteGate”中的函数,但我不确定如何使用“extension MyViewController:ToolbarPickerViewDeleteGate{”


我可以看到有人评论说“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
       }
    }
}