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