首页 > 解决方案 > 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)
    }
 }

}

标签: iosswiftxcode

解决方案


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


推荐阅读