我正在创建一个应用程序,上面有一个 UITextField,当点击/单击时,将显示一个从底部弹出的日期选择器。所述弹出面板有一个完成按钮,该按钮将在单击/点击时将选择的任何日期(默认为今天)应用到文本字段,最好是 YYYY-MM-DD 格式。
我一直在网上搜索,到目前为止,我已经看到了文本字段的 IBAction 示例,以及关于完成按钮如何工作的各种方式(大多数没有完成按钮),但我想知道如果我可以回收或基于我的代码用于下面的下拉菜单:
let wellheadPressTest : [String] = ["PSIG", "MPAG"]
var wellboreStatusPickerView = UIPickerView()
override func viewDidLoad() {
let wellboreStatusToolBar = UIToolbar()
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
let doneButtonWellbore = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerWellbore")
wellboreStatusToolBar.barStyle = UIBarStyle.Default
wellboreStatusToolBar.translucent = true
wellboreStatusToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
wellboreStatusToolBar.sizeToFit()
wellboreStatusToolBar.setItems([spaceButton,spaceButton,doneButtonWellbore], animated: false)
wellboreStatusToolBar.userInteractionEnabled = true
wellboreStatusPickerView.delegate = self
self.samplingWaterFormOneView.textfieldWellbore.inputView = wellboreStatusPickerView
self.samplingWaterFormOneView.textfieldWellbore.inputAccessoryView = wellboreStatusToolBar
}
// Various Required PickerView functions
func donePickerWellbore(){
let row = wellboreStatusPickerView.selectedRowInComponent(0);
pickerView(wellboreStatusPickerView, didSelectRow: row, inComponent:0)
self.samplingWaterFormOneView.textfieldWellbore.resignFirstResponder()
}
这是我尝试过的:
var dateSampledPickerView = UIDatePicker()
override func viewDidLoad() {
let dateSampledPickerToolBar = UIToolbar()
let doneButtonDate = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "donePickerDate")
dateSampledPickerToolBar.barStyle = UIBarStyle.Default
dateSampledPickerToolBar.translucent = true
dateSampledPickerToolBar.tintColor = UIColor(red: 76/255, green: 217/255, blue: 100/255, alpha: 1)
dateSampledPickerToolBar.sizeToFit()
dateSampledPickerToolBar.setItems([spaceButton,spaceButton,doneButtonDate], animated: false)
dateSampledPickerToolBar.userInteractionEnabled = true
dateSampledPickerView.datePickerMode = UIDatePickerMode.Date
dateSampledPickerView.addTarget(self, action: Selector("datePickerValueChanged"), forControlEvents: UIControlEvents.ValueChanged)
self.samplingWaterFormOneView.textfieldDateSampled.inputView = dateSampledPickerView
self.samplingWaterFormOneView.textfieldDateSampled.inputAccessoryView = dateSampledPickerToolBar
self.samplingWaterFormOneView.textfieldDateSampled.delegate = self
}
func datePickerValueChanged(sender:UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = "YYYY-MM-DD"
dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
self.samplingWaterFormOneView.textfieldDateSampled.text = dateFormatter.stringFromDate(sender.date)
}
func donePickerDate(){
self.samplingWaterFormOneView.textfieldDateSampled.resignFirstResponder()
}
我上面的代码确实显示了一个带有日期选择器的弹出菜单,当我在文本字段顶部显示一个完成按钮时,但文本字段没有获取日期。
编辑:还尝试修改 datePickerValueChanged
使其没有发件人,并且还在文本字段中使用 dateSampledPickerView
。没用。
在函数中添加注释表明 datePickerValueChanged
函数未被调用。
我做错了什么?
最佳答案
这里有一个带工具栏的日期选择器示例:
var date: NSDate?
var timePicker: UIDatePicker?
@IBOutlet weak var dateLabel: UILabel!
func initDatePicker() {
if self.timePicker == nil {
self.timePicker = UIDatePicker()
self.timePicker!.datePickerMode = UIDatePickerMode.Date
self.timePicker!.addTarget(self, action: "updateDate", forControlEvents: UIControlEvents.ValueChanged)
self.timePicker!.minimumDate = NSDate()
self.timePicker!.backgroundColor = UIColor().backgroundColor()
self.dateLabel.inputView = self.timePicker
self.dateLabel.inputAccessoryView = self.createPickerToolBar()
}
}
func updateDate() {
let picker: UIDatePicker = self.dateLabel.inputView as! UIDatePicker
self.dateLabel.text = picker.date.stringFromDate(kDateFormatSlash)
self.date = picker.date
self.delegate?.didIntroduceText(self.actionTextView.text.characters.count != 0 && self.searchableTableView?.getText().characters.count != 0 && self.dateLabel.text!.characters.count != 0)
}
func createPickerToolBar() -> UIToolbar {
let toolbar = UIToolbar()
let doneButton = UIBarButtonItem(title: "DONE", style: UIBarButtonItemStyle.Done, target: self, action: "doneAction")
doneButton.setTitleTextAttributes([NSFontAttributeName: UIFont(name: kOpenSansRegular, size: kHeaderFontSize)!, NSForegroundColorAttributeName: UIColor.whiteColor()], forState: UIControlState.Normal)
doneButton.accessibilityLabel = "DoneToolbar"
let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
toolbar.translucent = false
toolbar.sizeToFit()
toolbar.setItems([spaceButton, doneButton], animated: false)
toolbar.userInteractionEnabled = true
return toolbar
}
func doneAction() {
self.updateDate()
self.dateLabel.resignFirstResponder()
self.timePicker?.removeFromSuperview()
}
关于ios - Swift:在带有完成按钮的文本框上弹出 DatePicker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34894334/