'#selector'的参数没有引用

问题描述 投票:0回答:1

有人可以帮帮我吗?

这是我的代码:

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)

}
swift3 selector
1个回答
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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.