2017-08-01 30 views
3

我試圖在同一個viewController上有兩個不同的日期pickerView,並讓它們表示不同的數據。我嘗試了不同的方式來做到這一點,但兩個日期選擇器視圖顯示相同的數據,但不能把它們放在一起。我對新的快速編程很陌生。任何幫助都是極好的!如何在swift中在同一個UIView中創建自定義UI日期PickerViews

@IBOutlet weak var EventStart: UITextField! 
var datepicker = UIDatePicker() 
var datepicker2 = UIDatePicker() 
@IBOutlet weak var EventEnd: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    createDatePicker() 
    Event.delegate = self 
    eventName.delegate = self 
    // Do any additional setup after loading the view. 
} 
func createDatePicker(){ 

    datepicker.datePickerMode = .dateAndTime 
    datepicker2.datePickerMode = .dateAndTime 
    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed)) 
    toolbar.setItems([doneButton], animated: false) 
    EventEnd.inputAccessoryView = toolbar 
    EventEnd.inputView = datepicker2 
    EventStart.inputAccessoryView = toolbar 
    EventStart.inputView = datepicker 
} 

func donePressed(){ 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = .medium 
    dateFormatter.timeStyle = .none 
    EventStart.text = dateFormatter.string(from: datepicker.date) 
    EventEnd.text = dateFormatter.string(from: datepicker2.date) 
    print(EventStart) 
    print(EventEnd) 
    self.view.endEditing(true) 
} 

回答

0
@IBOutlet weak var EventStart: UITextField! 
var datepicker = UIDatePicker() 
var datepicker2 = UIDatePicker() 
@IBOutlet weak var EventEnd: UITextField! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.addDatePicker(datepicker, textfield:EventStart , selector: #selector(ViewController.donePressed)) 
    self.addDatePicker(datepicker2 , textfield:EventEnd ,selector: #selector(ViewController.donePressed2)) 

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


func addDatePicker(_ datepicker : UIDatePicker, textfield: UITextField, selector: Selector) { 


    let toolbar = UIToolbar() 
    toolbar.sizeToFit() 
    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action:selector) 
    toolbar.setItems([doneButton], animated: false) 


    textfield.inputAccessoryView = toolbar 
    textfield.inputView = datepicker 

} 

func donePressed(){ 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = .medium 
    dateFormatter.timeStyle = .none 
    EventStart.text = dateFormatter.string(from: datepicker.date) 
    print(EventStart) 
    self.view.endEditing(true) 
} 

func donePressed2(){ 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = .medium 
    dateFormatter.timeStyle = .none 
    EventEnd.text = dateFormatter.string(from: datepicker2.date) 
    print(EventEnd) 
    self.view.endEditing(true) 
} 
+0

謝謝你對我的工作:) – sam

+0

我很高興我的幫助。您應該檢查命名約定,例如https://github.com/raywenderlich/swift-style-guide。如果你開始使用它們,其他開發人員理解你的代碼會變得更加簡單。 –

0

簡單的事情是爲兩個em創建兩個單獨的方法。也不要在視圖加載時初始化它們。

這是我的代碼。

var objDatePickerFrom: UIDatePicker! 
var objDatePickerTo: UIDatePicker! 

然後在相應的按鈕點擊,我初始化它們如下(你也爲此在TextView中的委託方法,如果你不使用的按鈕。)

@IBAction func btnFromDateTapped(_ sender: UIButton) { 
    self.initDatePikerFrom(frame: self.view.frame) 
} 

@IBAction func btnToDateTapped(_ sender: UIButton) { 
    self.initDatePikerTo(frame: self.view.frame) 
} 

下面是初始化的日期的方法採摘。

func initDatePikerFrom(frame: CGRect) { 
    self.objDatePickerFrom = UIDatePicker() 
    objDatePickerFrom.backgroundColor = UIColor.white 
    objDatePickerFrom.datePickerMode = .date 
    if DeviceType.IS_IPHONE_4_OR_LESS 
    { 
     objDatePickerFrom?.frame.size = CGSize(width: frame.size.width, height: 150) 
    } 
    self.txtFromDate.inputView = objDatePickerFrom 

    objDatePickerFrom.maximumDate = Date() 

    if self.txtFromDate.text! != "" { 
     objDatePickerFrom.date = CommonFunctions.getDate(date: self.txtFromDate.text!) 
    } 
    self.view.bringSubview(toFront: objDatePickerFrom) 
    let numberToolbar = UIToolbar(frame: CGRect.init(x: 0.0, y: 0.0, width: frame.size.width, height: 40.0)) 
    numberToolbar.barStyle = UIBarStyle.default 
    numberToolbar.barTintColor = NavigationBGColor 
    numberToolbar.layer.borderColor = UIColor(red: 79.0/255.0, green: 157.0/255.0, blue: 191.0/255.0, alpha: 1.0).cgColor 
    numberToolbar.layer.borderWidth = 0.0 
    let lblSelect = UILabel(frame: CGRect.init(x: 0, y: 0, width: 150, height: 30)) 
    lblSelect.text = "Select Date" 
    lblSelect.textColor = WhiteFontColor 
    lblSelect.textAlignment = .center 

    let btnBarCancel = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(MyAccountViewController.btnCancelFromDateClick(_:))) 
    btnBarCancel.tintColor = WhiteFontColor 

    let btnBarDone = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(MyAccountViewController.btnDoneFromDateClick(_:))) 
    btnBarDone.tintColor = WhiteFontColor 

    numberToolbar.items = [ 
     btnBarCancel, 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     UIBarButtonItem.init(customView: lblSelect), 
     UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
     btnBarDone] 
    numberToolbar.sizeToFit() 
    self.txtFromDate.inputAccessoryView = numberToolbar 
    self.txtFromDate.isUserInteractionEnabled = true 
    self.txtFromDate.delegate = self 
    self.txtFromDate.becomeFirstResponder() 
} 

func initDatePikerTo(frame: CGRect) { 
     self.objDatePickerTo = UIDatePicker() 
     self.objDatePickerTo.backgroundColor = UIColor.white 
     self.objDatePickerTo.datePickerMode = .date 
     if DeviceType.IS_IPHONE_4_OR_LESS 
     { 
      self.objDatePickerTo?.frame.size = CGSize(width: frame.size.width, height: 150) 
     } 
     self.txtToDate.inputView = self.objDatePickerTo 

     self.objDatePickerTo.maximumDate = Date() 

     if self.txtToDate.text! != "" { 
      self.objDatePickerTo.date = CommonFunctions.getDate(date: self.txtToDate.text!) 
     } 
     self.view.bringSubview(toFront: self.objDatePickerTo) 
     let numberToolbar = UIToolbar(frame: CGRect.init(x: 0.0, y: 0.0, width: frame.size.width, height: 40.0)) 
     numberToolbar.barStyle = UIBarStyle.default 
     numberToolbar.barTintColor = NavigationBGColor 
     numberToolbar.layer.borderColor = UIColor(red: 79.0/255.0, green: 157.0/255.0, blue: 191.0/255.0, alpha: 1.0).cgColor 
     numberToolbar.layer.borderWidth = 0.0 
     let lblSelect = UILabel(frame: CGRect.init(x: 0, y: 0, width: 150, height: 30)) 
     lblSelect.text = "Select Date" 
     lblSelect.textColor = WhiteFontColor 
     lblSelect.textAlignment = .center 

     let btnBarCancel = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(MyAccountViewController.btnCancelToDateClick(_:))) 
     btnBarCancel.tintColor = WhiteFontColor 

     let btnBarDone = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.done, target: self, action: #selector(MyAccountViewController.btnDoneToDateClick(_:))) 
     btnBarDone.tintColor = WhiteFontColor 

     numberToolbar.items = [ 
      btnBarCancel, 
      UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
      UIBarButtonItem.init(customView: lblSelect), 
      UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil), 
      btnBarDone] 
     numberToolbar.sizeToFit() 
     self.txtToDate.inputAccessoryView = numberToolbar 
     self.txtToDate.isUserInteractionEnabled = true 
     self.txtToDate.delegate = self 
     self.txtToDate.becomeFirstResponder() 
    } 

其他與您的donePressed()相似的方法如下。

func btnDoneFromDateClick(_ sendre: AnyObject) 
{ 
    let date = CommonFunctions.getStrDate(date: self.objDatePickerFrom.date) 
    self.txtFromDate.text = "\(date.day) \(date.month) \(date.year)" 
    self.txtFromDate.resignFirstResponder() 
    self.txtFromDate.isUserInteractionEnabled = false 
} 

func btnDoneToDateClick(_ sendre: AnyObject) 
{ 
    let date = CommonFunctions.getStrDate(date: self.objDatePickerTo.date) 
    self.txtToDate.text = "\(date.day) \(date.month) \(date.year)" 
    self.txtToDate.resignFirstResponder() 
    self.txtToDate.isUserInteractionEnabled = false 
} 

這可以幫助你。
快樂編碼:)

+0

但我用故事板 – sam

+0

@sam我也用故事板,但我還沒有建立在故事板的數據選擇器,如果你想從故事板使用它們只是通過從實例故事板到init方法,而不是創建它們在邊初始化 –

相關問題