现在我有一个带文本字段的视图控制器。
当我点击文本字段时,会显示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中输入内容?
答案 0 :(得分:2)
一个简单的解决方法: 您可以使用shouldChangeCharactersInRange UITextfieldDelegate方法。
由于此方法仅在用户输入文本时调用(而不是以编程方式设置),因此只能返回false。
希望有所帮助:)
答案 1 :(得分:0)
感谢您的回答。
我终于使用标签解决了我的问题,并在tableview didSelectRowAtIndexPath事件中显示了datatimepicker。
在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)