2017-08-01 32 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方法,而不是创建它们在边初始化 –

相关问题