2017-09-13 2 views
1

Swift 3を使用してXcode 8.3.3およびiOS 10.3でiOS開発を学習しています。アカウント作成フォームを作成しようとしています' - [UITextField date]:インスタンスに送信された認識できないセレクタ0x7f89277121c0'

@IBAction func showDatePicker(_ sender: UITextField) { 
    let datePicker = UIDatePicker() 
    datePicker.datePickerMode = UIDatePickerMode.date 
    datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: -16, to: Date()) 
    dateOfBirth.inputView = datePicker 
    datePicker.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged) 
} 

@objc func datePickerValueChanged(_ picker: UIDatePicker) { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = DateFormatter.Style.medium 
    dateFormatter.timeStyle = DateFormatter.Style.none 
    dateOfBirth.text = dateFormatter.string(from: picker.date) 
} 

私は上記を実行すると、私はエラーを取得する:そのを注入しようとしているような

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextField date]: unrecognized selector sent to instance 0x7f89277121c0' 

私にはそれが見え、ユーザが誕生するUITextFieldの日のタッチアップで行いUIDatePicker UITextFieldの 'sender'値をdatePickerValueChangedフィールドに代入します。これは、t UIDatePicker型の値を返し、エラーを引き起こします。

 datePicker.addTarget(self, action: #selector(self.datePickerValueChanged(datePicker)), for: UIControlEvents.valueChanged) 

が、Xcodeのは、その後、私にエラーを与える:私は、私は明示的にdatePickerValueChangedメソッドに日付ピッカーオブジェクトを渡された場所にそれを変更しようとした

Argument of '#selector' does not refer to an '@objc' method, property, or initializer 

My機能は、その前に@objcを持っています私はなぜそれを許さないのか混乱しています。

だから、私の究極の質問は:にはどうすればdatePickerValueChangedに渡された値の型UIDatePicker、すなわち、日付ピッカーオブジェクトであることを確認していますか?

+0

は、あなたが掃除やプロジェクトを再構築しようとしたことがありますか? – QPDev

+0

このエラーは、日付ピッカーが最初に表示されたとき、またはピッカーで日付を選択したときに発生しますか? –

+0

私はクリーニングを試みましたが、それでも失敗します。また、これは日付ピッカーが表示される前に行われます。 – user1011376

答えて

0

実は、私はテストプロジェクトを構築し、あなたのコードは、(下記参照)の罰金を働いています。関数datePickerValueChangedが同じクラスにあると確信していますか? CreateAnAccountPage?

class ViewController: UIViewController, UITextFieldDelegate { 
var dateOfBirth:UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    dateOfBirth = UITextField(frame: CGRect(x: 0, y: 300, width: 150, height: 75)) 
    dateOfBirth.borderStyle = .line 
    view.addSubview(dateOfBirth) 
    self.showDatePicker(dateOfBirth) 
    // Do any additional setup after loading the view, typically from a nib. 
} 

func showDatePicker(_ sender: UITextField) { 
    let datePicker = UIDatePicker() 
    datePicker.datePickerMode = UIDatePickerMode.date 
    datePicker.maximumDate = Calendar.current.date(byAdding: .year, value: -16, to: Date()) 
    dateOfBirth.inputView = datePicker 
    datePicker.addTarget(self, action: #selector(self.datePickerValueChanged), for: UIControlEvents.valueChanged) 
    view.addSubview(datePicker) 
} 

@objc func datePickerValueChanged(_ picker: UIDatePicker) { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = DateFormatter.Style.medium 
    dateFormatter.timeStyle = DateFormatter.Style.none 
    dateOfBirth.text = dateFormatter.string(from: picker.date) 
} 
} 
+0

元の '#selector(self.datePickerValueChanged)'もうまくいきます。この答えは何も変わりません。 – rmaddy

+0

私はそれが私に次のエラーを与えます:タイプ 'CreateAnAccountPage'にはメンバー 'datePickerValueChanged(picker :)'がありません。 – user1011376

-1

試み: -

datePicker.addTarget(self, action: #selector(YourViewController.datePickerValueChanged), for: UIControlEvents.valueChanged) 
+0

私はこれを試しましたが、それは私に同じエラーを与えました。 – user1011376

関連する問題