现在我有一个带文本字段的视图控制器。
当我单击文本字段时,将显示UIDatePicker而不是普通键盘。
在UIDataPicker中选择日期/时间,更新文本字段。
这是我的代码:
@IBAction func fieldValueEditingDidBegin(sender: UITextField) {
if self.dateTimeEdit {
let datePickerView:UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.DateAndTime
sender.inputView = datePickerView
datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
}
}
func datePickerValueChanged(sender:UIDatePicker) {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = NSDateFormatterStyle.ShortStyle
dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
fieldValueTextField.text = dateFormatter.stringFromDate(sender.date)
doneBarButtonItem.enabled = true
}
我想阻止用户在UITextField中输入其他文本(例如使用外部键盘或粘贴字符串)
是否可以强制使用UIDataPicker并阻止在UITextField中输入?
一个简单的解决方法:您可以使用shouldChangeCharactersInRange UITextfieldDelegate方法。
由于此方法仅在用户输入文本时调用(而不是以编程方式设置),因此只能返回false。
希望能帮助到你 :)
谢谢你的回答。
我终于使用标签解决了我的问题,并在tableview didSelectRowAtIndexPath事件中显示datetimepicker。
在viewDidLoad中
popDatePickerFechaInicio = PopDatePicker(forLabelField: fechaInicioLabel)
并在tableView(tableView:UITableView,didSelectRowAtIndexPath indexPath:NSIndexPath)中
let initDate = self.fechaInicioLabel.text?.ToDateFromDateTimeShort() ?? NSDate()
let dataChangedCallback : PopDatePicker.PopDatePickerCallback = { (newDate : NSDate, forLabelField : UILabel) -> () in
forLabelField.text = (newDate.ToDateTimeShortString() ?? "?") as String
}
popDatePickerFechaInicio!.pick(self, initDate: initDate, dataChanged: dataChangedCallback)