将UIDatePicker与UITextField一起使用而不进行文本字段编辑

时间:2015-11-03 21:19:10

标签: ios swift

现在我有一个带文本字段的视图控制器。

当我点击文本字段时,会显示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中输入内容?

2 个答案:

答案 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)