首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UITextField和UIDatePicker

UITextField和UIDatePicker
EN

Stack Overflow用户
提问于 2015-12-23 09:00:56
回答 3查看 2K关注 0票数 0

我的UIDatePicker有两个问题

  • 我必须点击我的UITextField 2次才能出现UIDatePicker
  • 当我选择某一排的某物时,比如当天,UIDatePicker刚刚关闭,我认为最好是阻止它,并让一个按钮“完成”。

代码:

代码语言:javascript
运行
复制
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

@IBAction func tfDateNaissanceEditing(sender: UITextField) {
    let datePickerView:UIDatePicker = UIDatePicker()

    datePickerView.datePickerMode = UIDatePickerMode.Date

    sender.inputView = datePickerView

    datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)
    tfDateNaissance.resignFirstResponder()

}

func datePickerValueChanged(sender: UIDatePicker) {
    let dateFormatter = NSDateFormatter()

    dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle

    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle

    tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
    tfDateNaissance.resignFirstResponder()
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-23 09:24:20

又是我。

对于Q1,您正在侦听的tfDateNaissanceEditing函数的事件是什么?你对tfDateNaissance.resignFirstResponder()的目的是什么?我想那里发生的事情是你在听startEditing事件。因此,当您第一次触摸日期选择器时,它将被设置为输入视图,并在最后一行代码中立即被召回。

从理论上讲,只要在viewDidLoad中有如下代码,就可以实现您想要的结果

代码语言:javascript
运行
复制
...
// your other functions

let datePickerView : UIDatePicker = UIDatePicker()
datePickerView.datePickerMode = UIDatePickerMode.Date
UITextField.inputView = datePickerView

datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)

Q2。目前,每当DatePicker值发生变化时,它都会自行辞职,因此删除tfDateNaissance.resignFirstResponder()中的datePickerValueChanged函数将解决这一问题。如果您想要一个带有done按钮的自定义工具栏,您可以手动创建一个工具栏,并将其设置为viewDidLoad中的输入附件视图。您也可以通过使用导航栏(如this answer )来实现这一点。

顺便说一下,这个问题不需要didReceiveMemoryWarning函数。

票数 0
EN

Stack Overflow用户

发布于 2015-12-23 09:30:45

如果将tfDateNaissance.resignFirstResponder()留在datePickerValueChanged方法中,则选择器将在值更改后立即关闭。您必须添加一个cancel/done按钮并将resignFirstResponder()放入该函数中。我测试了代码,它起作用了。

我个人要做的是,首先声明datePicker

代码语言:javascript
运行
复制
let datePickerView  : UIDatePicker = UIDatePicker()

然后在viewDidLoad

代码语言:javascript
运行
复制
override func viewDidLoad() {

  datePickerView.datePickerMode =  UIDatePickerMode.Date
  datePickerView.addTarget(self, action: Selector("datePickerValueChanged:"), forControlEvents: UIControlEvents.ValueChanged)

  self.tfDateNaissance.inputView = self.datePickerView //your text field

  //I add a toolBar to the datePicker

  let pickerToolBar = UIToolbar()
  pickerToolBar.barStyle = UIBarStyle.BlackOpaque //you can change the style
  pickerToolBar.translucent = true
  pickerToolBar.tintColor = UIColor.redColor() // or other colours
  pickerToolBar.sizeToFit()

  let spaceButtonPicker = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: nil, action: nil)
  let cancelButtonPicker = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: "cancelDatePicker:")
  pickerToolBar.setItems([cancelButtonPicker, spaceButtonPicker], animated: false)
  pickerToolBar.userInteractionEnabled = true
   tfDateNaissance.inputAccessoryView = pickerToolBar

}



func datePickerValueChanged(sender: UIDatePicker) {

 let dateFormatter = NSDateFormatter()
 dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
 dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
 tfDateNaissance.text = dateFormatter.stringFromDate(sender.date)
 //if you leave resignFirstResponder() here, the picker will close as soon as the value change

}

这个处理完成按钮

代码语言:javascript
运行
复制
func cancelDatePicker(sender: UIBarButtonItem){
  tfDateNaissance.resignFirstResponder()
}

这将是结果

票数 1
EN

Stack Overflow用户

发布于 2015-12-23 09:27:38

首先,对uitextfield使用委托回调方法。中显示日期选择器(通常是通过模式完成的)。

代码语言:javascript
运行
复制
textFieldDidBeginEditing:

在模态视图控制器中,添加一个完成按钮,该按钮取消模态视图控制器。还获取日期选择器中设置的日期值,并将它们放在文本视图中,如下所示:

self.PresentingViewController (您的功能);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34431942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档