ios - Swift: How to pass my selected textField as a parameter through selector parameter of my UIBarButtonItem
问题描述
I have two text Fields and both of them invoke a date picker when they are clicked upon by the user. I have a date picker that has a done button and I want to show the time that I select from my date picker on my selected textField. So how can I pass the selected text Field as an argument in the selector parameter of my UIBarButtonItem. Below is the whole code. Please Help. Thank you!
@IBOutlet weak var startingTimeTxt: UITextField!
@IBOutlet weak var endingTimeTxt: UITextField!
let datePickerTime = UIDatePicker()
override func viewDidLoad() {
super.viewDidLoad()
startingTimeTxt.delegate = self
endingTimeTxt.delegate = self
datePickerTime.datePickerMode = .time
}
func createDatePicker(textField: UITextField) {
//toolbar
let toolbar = UIToolbar()
toolbar.sizeToFit() //will fit to full screen
//bar done button
let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(textField: )))
//remember in selector u dont want to call the method , just name it
toolbar.setItems([doneBtn], animated: true)
//assign toolbar
textField.inputAccessoryView = toolbar
//assign date picker to textfield
textField.inputView = datePickerTime
}
@objc func donePressed(textField: UITextField) {
textField.text = "\(datePickerTime)"
self.view.endEditing(true)
}
}
//MARK: - TextField Delegate
extension NewActivityTableViewController: UITextFieldDelegate {
func textFieldDidBeginEditing(_ textField: UITextField) {
if textField == startingTimeTxt {
createDatePicker(textField: textField)
}
else if textField == endingTimeTxt {
createDatePicker(textField: textField)
}
}
}
解决方案
You need to make it button: UIBarButtonItem
as it's what you added the selector for and inside the method access the date of the picker and use a date formatter to extract the required text and assign it to the textfield's text
let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(_:)))
With
@objc func donePressed(_ button: UIBarButtonItem) {
print(datePickerTime.date)
}
Also check Swift: using UIDatePicker as UITextField inputView not updating
推荐阅读
- c++ - 识别结构 C++ 中的唯一元素
- python - Python:在系列中寻找子字符串
- sql - 如何在 SQL for while 循环中获取动态值?
- python - 为什么使用sess.run(placeholder, feed_dict)时会返回占位符的张量描述?
- javascript - 在不被阻止的情况下获取 XML (CORB)
- python - 如何为 HTML 文件中的每一行构造一个字典
- python-3.x - 为什么这个休息不起作用?我应该得到 [0,1] 返回而不是 [0,1,1,0]
- java - 我在按钮上有一个 javafx.fxml.LoadException
- select - 使用 CQL 的 where 子句进行选择
- javascript - react-testing-library 为什么 toBeInTheDocument() 不是函数