'#selector'的争论不参考

时间:2018-02-28 06:58:12

标签: swift3 selector

任何人都可以帮助我吗?

这是我的代码:

fileprivate func datapicker(sender : UITextField){

    let datePickerView:UIDatePicker = UIDatePicker()

    datePickerView.datePickerMode = UIDatePickerMode.date

    sender.inputView = datePickerView

    datePickerView.addTarget(self, action: #selector(datePickerValueChanged(sender: datePickerView, myText: sender)), for: UIControlEvents.valueChanged)

}

@objc func datePickerValueChanged(sender:UIDatePicker , myText : UITextField) {

    let dateFormatter = DateFormatter()

    dateFormatter.dateStyle = DateFormatter.Style.medium

    dateFormatter.timeStyle = DateFormatter.Style.none

    myText.text = dateFormatter.string(from: sender.date)
}

@IBAction func fromdateAction(_ sender: UITextField) {
    datapicker(sender: sender)

}

1 个答案:

答案 0 :(得分:0)

不能像这样调用选择器。 无法传递选择器的参数, API

你必须传入:

#selector(datePickerValueChanged)

这意味着您的datePickerValueChanged方法不能使用2个参数,因为API只需要一个。

这意味着您需要一种方法来了解哪个文本字段的日期选择器已更改。一种简单的方法是创建一个名为focusedTextField的属性:

var focusedTextField: UITextField!

sender方法中将其设置为dataPicker

focusedTextField = sender

当用户结束编辑时将其设置为nil

// in another method that is called when the text field ends editing
focusedTextField = nil

现在,您可以从datePickerValueChanged中移除第二个参数,然后使用focusedTextField