【问题标题】:How to create Custom UI Date PickerViews in the same UIView in swift如何在同一 UIView 中快速创建自定义 UI 日期选择器视图
【发布时间】:2018-01-08 04:15:53
【问题描述】:

我试图在同一个 viewController 上有两个不同的日期选择器视图,并让它们代表不同的数据。我尝试了不同的方法来做到这一点,但是两个日期选择器视图都显示了相同的数据,但不能把它们放在一起。我是快速编程的新手。任何帮助都会很棒!

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

【问题讨论】:

    标签: ios swift3 uiviewcontroller


    【解决方案1】:

    简单的事情是为 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
    }
    

    希望这会对您有所帮助。
    快乐编码:)

    【讨论】:

    • 但我使用的是故事板
    • @sam 我也使用故事板,但我还没有在故事板中创建数据选择器,如果您想从故事板中使用它们,只需将实例从故事板传递给 init 方法,而不是在侧面 init 中创建它们
    【解决方案2】:
    @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)
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多