2016-12-01 29 views
1

使用最新的Xcode 8.2 Beta和Swift 3.使用文本框显示DatePicker的一些Swift示例以显示日期并使其工作。我的问题是,当你点击日期输入文本框时,键盘会首先出现。如果我在文本字段中添加任何内容并在其他字段中执行一些更多的返回操作,DatePicker就会开始工作(DatePicker在您点击该字段并且可以输入日期时出现)。那么当点击日期字段时,如何才能获取DatePicker?我发送的事件是“退出时没有结束”。放入大量的resigFirstResponder来查看我是否可以敲下键盘,但它们似乎没有太大影响。我用当前日期初始化文本框,但我很确定它在没有初始化的情况下工作。我有两个文本框/ DatePickers。这是我对他们的一个代码:键盘带有日期选取器

func datePickerChangedSell(sender: UIDatePicker) { 

    resignFirstResponder() 
    let formatter = DateFormatter() 
    formatter.dateStyle = .medium 
    sellDateDisp.text = formatter.string(from: sender.date) 

    resignFirstResponder() 


} 

    @IBAction func sellDateAction(_ sender: UITextField) { 
    let datePicker:UIDatePicker = UIDatePicker() 
    datePicker.datePickerMode = UIDatePickerMode.date 
    sender.inputView = datePicker 
    resignFirstResponder() 
    datePicker.addTarget(self, action: #selector(datePickerChangedSell(sender:)), for: .valueChanged) 
    resignFirstResponder() 
} 

回答

1

什么原因导致日期选择器,当您激活文本字段行sender.inputView = datePicker显示。你应该在viewDidLoad中做到这一点,而不是在IBaction

编辑文本字段,交换到另一个字段,然后交换回来的原因必须是您调用的是sellDataAction方法,该方法指定文本字段的inputView

+0

感谢您的帮助。试图将sender.InputView移动到viewDidLoad,并得到了有关发件人的未解决的引用。试图在viewDidLoad的parens中添加“_ sender:UITextField”,并且它说了一些关于方法超类没有覆盖的内容。所以会尝试更好地理解你的建议。 – flashgordon

+0

您需要在管理它的视图控制器中为您的文本视图创建一个插座。打开Storyboard,然后在附件编辑器中打开视图控制器的源文件。控制 - 从文本视图拖动到您的源文件,并给文本视图的名称。然后在调用中设置文本视图的'inputView' –

+0

Duncan的名称,谢谢我试试看。我想我会先尝试一个单独的版本。我在这里有很多对象,如果你创建一个连接并且不起作用,我发现连接难以撤消。得到它的权利,然后实施我的产品构建。 – flashgordon

0

邓肯,谢谢你的帮助,我想通了,你让我在那里。我试图将你的答案标记为答案,但它不会让我。我的问题是我创建了“编辑没完”的操作,而不是“编辑没有开始”。当我删除教科书并重新添加动作时,DatePicker在没有文本键盘的情况下第一次出现。一个问题,是否有一种方法可以改变编辑完成编辑开始?我看到带箭头的圆圈,它显示了所有的编辑选项,但它似乎没有让你改变它。好像我不得不放弃并重新添加文本框。另一个参考点。它不会让我直接在viewDidLoad方法内连接文本框。它坚持说我把它连接到别的地方。

+0

一个有趣的副作用。使用编辑完成后,即使当我点击日期时,它也会保存我为该会话输入的最后日期。当我去编辑开始时,它会在我下次点击该日期教科书时显示我的初始值。 – flashgordon

+0

另外编辑Did End是默认值,所以其他人可能会遇到这个问题。 – flashgordon