2017-01-25 1 views
0

У меня есть UITextField, который в настоящее время правильно показывает DatePickerView. Я попытался оглянуться, как добавить кнопку «Готово», но я не могу найти способ работать или зарегистрироваться, чтобы закрыть DatePicker.Появилась проблема с появлением кнопки «done», которая закрывает datePickerView из UITextField

Вот функция, которая показывает DatePicker, когда кто-то нажимает на UITextField:

@IBAction func selectDate(_ sender: UITextField) { 
    let datePickerView:UIDatePicker = UIDatePicker() 
    datePickerView.datePickerMode = UIDatePickerMode.date 
    sender.inputView = datePickerView 

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

и вот функция, которая отслеживает любые изменения и отображает его внутри UITextField

func datePickerValueChanged(sender:UIDatePicker) { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = DateFormatter.Style.short 
    dateFormatter.timeStyle = DateFormatter.Style.none 

    birthday.text = dateFormatter.string(from: sender.date) 

} 

Как бы я добавить кнопку для этого конкретного кода, который закрывает DatePicker?

+0

И как я могу уволить datePicker (или клавиатуру, например), если пользователь прикасается где-нибудь в viewController, в сторону для textField и keyboardPicker? – VDog

ответ

1
override func viewDidLoad() { 
super.viewDidLoad() 

let toolbar = UIToolbar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 30)) 

let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil) 
let doneButton = UIBarButtonItem(title: “Done”, style: .Done, target: self, action: Selector(“doneButtonAction”)) 

var buttons = [UIBarButtonItem]() 
buttons.append(space) 
buttons.append(doneButton) 
toolbar.setItems(buttons, animated: false) 
toolbar.sizeToFit() 


self.datePickerView.inputAccessoryView = toolbar 
} 

func doneButtonAction(){ 
self.view.endEditing(true) 
} 
1

Еще один способ заключается в том, что в случае datePickerValueChanged первого отклонять клавиатуры, а затем скрыть UIDatePicker.

func datePickerValueChanged(sender:UIDatePicker) { 
     let dateFormatter = DateFormatter() 
     dateFormatter.dateStyle = DateFormatter.Style.short 
     dateFormatter.timeStyle = DateFormatter.Style.none 

     birthday.text = dateFormatter.string(from: sender.date) 

     self.view.endEditing(true) // Hide keyboard 

    } 
1

Вы также можете использовать это.

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
     self.view.endEditing(true) 
} 

Используя эту кнопку, вам не нужна кнопка.
Он уйдет с вашего текстового поля или textView, нажав на него.
Примечание: Это не повлияет на scrollView.

1

добавить следующие два действия и добавить код в viewDidLoad.

override func viewDidLoad() { 
     super.viewDidLoad() 
     datePickerView = UIDatePicker() 
     datePickerView!.datePickerMode = .Date 
     txtxt.inputView = datePickerView 
     datePickerView!.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged) 
     let toolBar = UIToolbar(frame: CGRect(x: CGFloat(0), y: CGFloat(0), width: CGFloat(self.view.frame.size.width), height: CGFloat(44))) 
     toolBar.tintColor = UIColor.grayColor() 
     let doneBtn = UIBarButtonItem(title: "Done", style: .Bordered, target: self, action:"ShowSelectedDate") 

     let space = UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil) 

     toolBar.items = [space, doneBtn] 
     txtxt.inputAccessoryView = toolBar 
     // Do any additional setup after loading the view, typically from a nib. 
    } 
func ShowSelectedDate(){ 
     self.view.endEditing(true) 
    } 

    func handleDatePicker(sender: UIDatePicker) { 
     let dateFormatter = NSDateFormatter() 
     dateFormatter.dateFormat = "yyyy-MM-dd" 
     txtxt.text = dateFormatter.stringFromDate(sender.date) 
    } 
Смежные вопросы