Ios 如何在swift的同一UIView中创建自定义UI日期选择器视图

Ios 如何在swift的同一UIView中创建自定义UI日期选择器视图,ios,swift3,uiviewcontroller,Ios,Swift3,Uiviewcontroller,我试图在同一个viewController上有两个不同的日期选择器视图,并让它们表示不同的数据。我尝试了不同的方法来实现这一点,但两个日期选择器视图都显示相同的数据,但无法将它们全部放在一起。我对swift编程还不熟悉。任何帮助都会很棒 @IBOutlet weak var EventStart: UITextField! var datepicker = UIDatePicker() var datepicker2 = UIDatePicker() @IBOutlet weak var Ev

我试图在同一个viewController上有两个不同的日期选择器视图,并让它们表示不同的数据。我尝试了不同的方法来实现这一点,但两个日期选择器视图都显示相同的数据,但无法将它们全部放在一起。我对swift编程还不熟悉。任何帮助都会很棒

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

简单的方法是为两个em创建两个单独的方法。也不要在视图加载时初始化它们

这是我的代码

var objDatePickerFrom: UIDatePicker!
var objDatePickerTo: UIDatePicker!
然后点击相应的按钮,我如下所示初始化它们(如果不使用按钮,也可以在textview的委托方法中执行此操作。)

下面是初始化日期选择器的方法

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
}
希望这对你有帮助。

快乐编码:)

但我用的是故事board@sam我也使用storyboard,但我没有在storyboard中创建数据选择器,如果您想从storyboard中使用它们,只需将实例从storyboard传递到init方法,而不是在side init中创建它们。我很高兴我提供了帮助。例如,您应该检查命名约定。如果您开始使用它们,您和其他开发人员理解您的代码就会简单得多。
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
}
@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)
}