2015-01-20 2 views
8

Swift에서 팝업 된 datePickerView 내에 완료 버튼을 추가하고 싶습니다.Swift의 팝업 datePickerView에 완료 버튼을 추가 하시겠습니까?

@IBOutlet var datePicker: UITextField! 

@IBAction func dateTextInputPressed(sender: UITextField) { 

    var datePickerView = UIDatePicker() 
    datePickerView.datePickerMode = UIDatePickerMode.Date 

    sender.inputView = datePickerView 
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged) 
} 

func handleDatePicker(sender: UIDatePicker) { 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    datePicker.text = dateFormatter.stringFromDate(sender.date) 
} 

내가 성공적으로 datePickerView 팝업이 코드를 사용할 수 있습니다 : 여기

는 코드입니다. 내가 날짜를 선택한 후

result of datePickerView

는하지만, 그것을 기각하는 "완료"버튼이 없습니다.

그럼 어떻게 완료 버튼을 추가 할 수 있습니까?

감사합니다.

답변

17

을 . 3 2

extension UIToolbar { 

func ToolbarPiker(mySelect : Selector) -> UIToolbar { 

    let toolBar = UIToolbar() 

    toolBar.barStyle = UIBarStyle.Default 
    toolBar.translucent = true 
    toolBar.tintColor = UIColor.blackColor() 
    toolBar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: mySelect) 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil) 

    toolBar.setItems([ spaceButton, doneButton], animated: false) 
    toolBar.userInteractionEnabled = true 

    return toolBar 
} 

} 

스위프트 스위프트 - 단순히 당신의 ViewController 4

extension UIToolbar { 

func ToolbarPiker(mySelect : Selector) -> UIToolbar { 

    let toolBar = UIToolbar() 

    toolBar.barStyle = UIBarStyle.default 
    toolBar.isTranslucent = true 
    toolBar.tintColor = UIColor.black 
    toolBar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: mySelect) 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 

    toolBar.setItems([ spaceButton, doneButton], animated: false) 
    toolBar.isUserInteractionEnabled = true 

    return toolBar 
} 

} 

그리고 당신이 그것을 사용할 수 있습니다

override func viewDidLoad() { 
    super.viewDidLoad() 

//SWIFT2 
/* 
let toolBar = UIToolbar().ToolbarPiker(#selector(MyViewController.dismissPicker)) 

*/ 
// Swift3 - 4 
    let toolBar = UIToolbar().ToolbarPiker(mySelect: #selector(MyViewController.dismissPicker)) 

    myTextField.inputAccessoryView = toolBar 


} 

// Swift 2 - 3 
func dismissPicker() { 

    view.endEditing(true) 

} 

// Swift 4 
@objc func dismissPicker() { 

    view.endEditing(true) 

} 
+1

우수한 솔루션입니다. 신속한 3 코드에 대한 작은 수정 : toolBar = UIToolbar(). ToolbarPiker (mySelect : #selector –

14

inputView 속성에 일반 UIView을 사용할 수 있습니다. 이 UIViewUIDatePickerUIButton을 추가 할 수 있습니다.

@IBAction func dateTextInputPressed(sender: UITextField) { 

    //Create the view 
    let inputView = UIView(frame: CGRectMake(0, 0, self.view.frame.width, 240)) 


    var datePickerView : UIDatePicker = UIDatePicker(frame: CGRectMake(0, 40, 0, 0)) 
    datePickerView.datePickerMode = UIDatePickerMode.Date 
    inputView.addSubview(datePickerView) // add date picker to UIView 

    let doneButton = UIButton(frame: CGRectMake((self.view.frame.size.width/2) - (100/2), 0, 100, 50)) 
    doneButton.setTitle("Done", forState: UIControlState.Normal) 
    doneButton.setTitle("Done", forState: UIControlState.Highlighted) 
    doneButton.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal) 
    doneButton.setTitleColor(UIColor.grayColor(), forState: UIControlState.Highlighted) 

    inputView.addSubview(doneButton) // add Button to UIView 

    doneButton.addTarget(self, action: "doneButton:", forControlEvents: UIControlEvents.TouchUpInside) // set button click event 

    sender.inputView = inputView 
    datePickerView.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged) 

    handleDatePicker(datePickerView) // Set the date on start. 
} 

func handleDatePicker(sender: UIDatePicker) { 
    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 
    datePicker.text = dateFormatter.stringFromDate(sender.date) 
} 

func doneButton(sender:UIButton) 
{ 
    datePicker.resignFirstResponder() // To resign the inputView on clicking done. 
} 
2

대신 텍스트 필드의 버튼을 사용하는 경우 :

/** * MARK - 나는 선택기를 닫습니다이 확장을 만들어 사전 예약 작업을 */

@IBAction func advanceBookingAction(sender: UIButton) { 

    var datePicker : UIDatePicker = UIDatePicker() 
    var datePickerContainer = UIView() 

    datePickerContainer.frame = CGRectMake(0.0, self.view.frame.height/2, 320.0, 300.0) 
    datePickerContainer.backgroundColor = UIColor.whiteColor() 

    var pickerSize : CGSize = datePicker.sizeThatFits(CGSizeZero) 
    datePicker.frame = CGRectMake(0.0, 20, pickerSize.width, 460) 
    datePicker.setDate(NSDate(), animated: true) 
    datePicker.maximumDate = NSDate() 
    datePicker.datePickerMode = UIDatePickerMode.DateAndTime 
    datePicker.addTarget(self, action: "dateChangedInDate:", forControlEvents: UIControlEvents.ValueChanged) 
    datePickerContainer.addSubview(datePicker) 

    var doneButton = UIButton() 
    doneButton.setTitle("Done", forState: UIControlState.Normal) 
    doneButton.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal) 
    doneButton.addTarget(self, action: Selector("dismissPicker:"), forControlEvents: UIControlEvents.TouchUpInside) 
    doneButton.frame = CGRectMake(250.0, 5.0, 70.0, 37.0) 

    datePickerContainer.addSubview(doneButton) 

    self.view.addSubview(datePickerContainer) 

}// end advanceBookingAction 

/** 
* MARK - observer to get the change in date 
*/ 

func dateChangedInDate(sender:UIDatePicker){ 

    var dateFormatter = NSDateFormatter() 
    dateFormatter.dateStyle = NSDateFormatterStyle.LongStyle 
    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle 
    objMethodInc.printvj("date selected \(datePicker.date)") 

}// end dateChangedInDate 

/* 
* MARK - dismiss the date picker value 
*/ 
func dismissPicker(sender: UIButton) { 
    objMethodInc.printvj("dismiss date picker") 
    datePickerContainer.removeFromSuperview() 
}// end dismissPicker 
관련 문제