Ios 如何在swift的同一UIView中创建自定义UI日期选择器视图
我试图在同一个viewController上有两个不同的日期选择器视图,并让它们表示不同的数据。我尝试了不同的方法来实现这一点,但两个日期选择器视图都显示相同的数据,但无法将它们全部放在一起。我对swift编程还不熟悉。任何帮助都会很棒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
@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)
}