2016-12-07 3 views
0

В моем приложении у меня есть текстовое поле, чтобы добавить дату рождения. Я добавляю всплывающее окно datePicker, когда пользователь нажимает на текстовое поле. datePicker правильно и после того, как пользователь выберет дату, отображаемую в текстовом поле. Проблема заключается в выборе даты, когда datePicker не закрывается.DatePicker не закрывается после крана

Это мой код:

class BController: UIViewController, UITextFieldDelegate { 

@IBOutlet weak var dateOfBirth: UITextField! 

    let datePicker = UIDatePicker() 




    func textFieldShouldReturn(textField: UITextField) -> Bool { 
     textField.resignFirstResponder() 
     // self.view.endEditing(true) 
     return true 
    } 



    func textFieldDidBeginEditing(textField: UITextField){ 
     if textField == dateOfBirth{ 
      // let datePicker = UIDatePicker() 

      datePicker.datePickerMode = UIDatePickerMode.Date 

      datePicker.backgroundColor = UIColor.blackColor() 
      datePicker.setValue(UIColor.whiteColor(), forKey: "textColor") 

      textField.inputView = datePicker 
      datePicker.addTarget(self, action: "datePickerChanged:", forControlEvents: .ValueChanged) 
     } 
    } 

    func datePickerChanged(sender: UIDatePicker){ 

     let formatter = NSDateFormatter() 
     formatter.dateFormat = "dd-MM-yyyy" 
     // formatter.dateStyle = .ShortStyle 
     // formatter.timeStyle = .NoStyle 
     dateOfBirth.text = formatter.stringFromDate(sender.date) 

    } 

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
     print("touch happened") 
     self.view.endEditing(true) 

    } 


    override func viewDidLoad() { 
     super.viewDidLoad() 
     dateOfBirth.delegate = self 
     text1.delegate = self 
     text2.delegate = self 

     // Do any additional setup after loading the view. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 



} 

Я получил выход консоли как:

непризнанного селектор отправляется например 0x7 Нагрузочным приложение из-за неперехваченное исключение 'NSInvalidArgumentException', причина: «- [BController getCalendar:]: непризнанный селектор, отправленный в пример 0x78789050 '

Как решить эту проблему? Я использую Xcode 6.2. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

+0

Пожалуйста, покажите нам код в вашей функции getCalendar – Asike

+0

@Asike У меня нет метода, называемого getCalendar. Я новичок в разработке iSO, и я последовал за учебником для этого процесса. Я тоже не вижу никакого метода, называемого getCalendar. Я не знаю, откуда эта ссылка на ошибку. –

ответ

0

В документации говорят:

вар inputView: UIView? Пользовательский вид ввода для отображения, когда текстовое поле становится первым ответчиком.

Таким образом, вы должны сначала инициализировать Datepicker, а затем присвоить его inputView собственности DateOfBirth в методе viewDidLoad вместо метода textFieldDidBeginEditing.

Для закрытия Datepicker на кран снаружи использовать UITapGestureRecognizer добавлен self.view

class ViewController: UIViewController { 

    @IBOutlet weak var textField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 

     let datePicker = UIDatePicker.init() 
     textField.inputView = datePicker 

     let gestureRecognizer = UITapGestureRecognizer.init(target: self, action: #selector(backgroundTap(gesture:))); 
     view.addGestureRecognizer(gestureRecognizer) 

    } 

    func backgroundTap(gesture : UITapGestureRecognizer) { 
     textField.resignFirstResponder() // or view.endEditing(true) 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Ваша ошибка состоит в том, что, когда textFieldDidBeginEditing вызов метода, UITextField ничего не знает о UIDatePicker.

+0

Спасибо. Я пробовал этот, но все тот же результат, и у меня такое же исключение. Есть идеи? –

+0

Я обновил свой ответ, попробовал – Asike

Смежные вопросы