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