【问题标题】:Swift: How to pass my selected textField as a parameter through selector parameter of my UIBarButtonItemSwift:如何通过我的 UIBarButtonItem 的选择器参数将我选择的文本字段作为参数传递
【发布时间】:2020-07-11 10:23:32
【问题描述】:

我有两个文本字段,当用户单击它们时,它们都会调用日期选择器。我有一个带有完成按钮的日期选择器,我想在所选文本字段上显示我从日期选择器中选择的时间。那么如何将选定的文本字段作为参数传递给我的 UIBarButtonItem 的选择器参数。 下面是整个代码。请帮忙。谢谢!

@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)
    }
 }

}

【问题讨论】:

  • 一点也不。目标/操作方法的参数必须是受影响的 UI 元素(条形按钮),仅此而已。

标签: ios swift xcode


【解决方案1】:

您需要将其设为 button: UIBarButtonItem,因为它是您添加的选择器,并且在方法内部访问选择器的日期并使用日期格式化程序提取所需的文本并将其分配给文本字段的文本

let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(donePressed(_:)))

@objc func donePressed(_ button: UIBarButtonItem) { 
  print(datePickerTime.date)
}

同时检查Swift: using UIDatePicker as UITextField inputView not updating

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多