2017-01-25 22 views
0

UITextFieldが表示されています。現在はDatePickerViewが正しく表示されています。私は完了ボタンを追加する方法を見てみましたが、それを動作させる方法や、DatePickerを閉じるために登録する方法を見つけることができません。「完了」ボタンが表示されず、UITextFieldのdatePickerViewを閉じると

@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) 

} 

内側に表示されます。ここでは

は、誰かが UITextFieldをクリックしたとき DatePickerを示して機能です DatePickerを閉じるこの特定のコードのボタン?

+0

、ユーザーがテキストフィールドとkeyboardPickerのために取って、のViewControllerのどこに触れた場合、どのように私は、日付ピッカー(または、例えばキーボード)を消すでしょうか? – 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) 
} 

これを使用すると、完了ボタンは必要ありません。
あなたのtextFieldまたはtextViewの外側をタップすることで辞任します。
:scrollViewには影響しません。

1

次の2つのアクションを追加し、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) 
    } 
関連する問題