Swift 如何在选择器中使用参数

Swift 如何在选择器中使用参数,swift,Swift,目前我正在制作pickerDate与TextField交互 class ViewController: UIViewController { @IBOutlet weak var fromDateFilterTextField: UITextField! @IBOutlet weak var toDateFilterTextField: UITextField! override func viewDidLoad() { super.viewDidLoa

目前我正在制作pickerDate与TextField交互

class ViewController: UIViewController {
    @IBOutlet weak var fromDateFilterTextField: UITextField!

    @IBOutlet weak var toDateFilterTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        setupUI()

    }
    private func setupUI(){
        fromDateFilterTextField.setInputViewDatePicker(target: self, selector: #selector(tapDone(_:)))
        toDateFilterTextField.setInputViewDatePicker(target: self, selector: #selector(tapDone(_:)))
    }

@objc func tapDone(textField : UITextField) {

}

}

我想将textfield作为tapDone的参数传递,以便重用代码,因为我想只使用更改tapDone的参数来更新不同textfield的日期。

好的,我理解(通常)您正在尝试做的事情。简而言之,您不能将
UITextField
作为由
UIBarButtonItem
执行的
选择器的参数传递。也就是说,还有其他选择

我能想到的最简单的解决方案是使用
UITextField
s和
uibarbuttoneim
s的
tag
属性。要设置此设置,您需要更新每个
UITextField
标记,以便它们都是唯一的。例如,您的
fromDateFilterTextField
标记可以是0,而
toDateFilterTextField
可以是1。只要确保它们彼此不同,如果你有更多

更新文本字段上的标记后,可以通过修改
setInputViewDatePicker
方法来确保
UIBarButtonItem
具有相同的标记,如下所示:

func setInputViewDatePicker(target : Any , selector : Selector){
    ...
    let barButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector) //7
    barButton.tintColor = .white
    //Make the barButton tag match the associated textField's tag
    barButton.tag = self.tag
    ...
}
即使不能将
UITextField
作为参数传递,也可以通过如下更改选择器方法来传递
UIBarButton
执行
选择器

@objc func tapDone(_ sender: UIBarButtonItem) {

}
然后,您可以通过查找匹配的标记来确定哪个文本字段与
tapDone
关联:

@objc func tapDone(_ sender: UIBarButtonItem) {
  switch sender.tag {
  case 0:
    print("This is fromDateFilterTextField")
  case 1:
    print("This is toDateFilterTextField")
  default:
    print("This is a different textField")
  }
}

您还可以查看中的
viewWithTag
,以寻求可能的改进,尽管有时非常明确会使代码更具可读性,更不容易出现错误。

什么是
setInputViewDatePicker
?发布您的代码的其余部分,以便我们能够理解所询问的内容。亲爱的朋友,很抱歉,目前作为摘要的代码只创建了一个选择器日期,我希望重用选择器日期来更新我的文本字段的日期,因此我希望在选择器中发送参数。可能是Ty的副本(以及许多其他副本),以获得您的支持,我查一下。
@objc func tapDone(_ sender: UIBarButtonItem) {
  switch sender.tag {
  case 0:
    print("This is fromDateFilterTextField")
  case 1:
    print("This is toDateFilterTextField")
  default:
    print("This is a different textField")
  }
}