【问题标题】:How can I show a UIDatePicker instead of a keyboard when a user selects a UITextField?当用户选择 UITextField 时,如何显示 UIDatePicker 而不是键盘?
【发布时间】:2010-12-24 14:40:02
【问题描述】:

我在表格视图中有一个漂亮干净的 UI,其中有一些文本字段供用户填写。其中一个字段是用户的生日。

我想拥有它,这样当用户选择生日字段时,会出现一个包含 UIDatePicker 的视图,就像选择文本字段时不同的键盘一样。

这可以吗?我将不得不阻止文本字段成为第一响应者(以避免键盘出现),如果之前没有显示键盘,我将不得不动画视图向上滑动。

是否可以选择以模态方式呈现视图?如果是这样,我将如何去做?从文档来看,模态视图似乎仍然占据整个屏幕,我只想使用较低的 216 像素(键盘和 UIDatePicker 的高度)。

有人对如何进行此操作有任何提示吗?

【问题讨论】:

    标签: iphone cocoa-touch keyboard uidatepicker


    【解决方案1】:

    老问题,但如今正确的做法是将 UITextField 的 inputView 设置为您在某处创建的选择器。像这样的:

    UIPickerView *myPicker = [[UIPickerView alloc] init];
    // set picker frame, options, etc...
    // N.B. origin for the picker's frame should be 0,0
    
    [myTextField setInputView:myPicker];
    

    当你去编辑 UITextField 时,iOS 实际上只是显示textField.inputView 的任何视图,默认情况下是键盘,只要它是 UIView 的子类,你就可以随意设置它。

    【讨论】:

    • 应该接受这个答案,而不是“UIView 动画”解决方案。谢谢
    【解决方案2】:

    关于动画,看一下 DateCell 示例应用程序 - http://developer.apple.com/library/ios/#samplecode/DateCell/Introduction/Intro.html

    在任何情况下,正确的方法是设置 UITextField 的 inputView 以显示选择器而不是键盘。这就是它的本意。更多关于这里: How can I present a picker view just like the keyboard does?

    干杯,

    奥德。

    【讨论】:

      【解决方案3】:

      我将通过从屏幕底部向上动画包含 UIDatePicker、完成和取消按钮的视图来实现这一点。使用 CoreAnimation,这应该很容易。

      【讨论】:

      • 我该怎么做呢?我有一个在 IB 中设计的视图控制器/视图,但我不知道下一步该做什么。我是否将视图作为子视图添加到当前显示的视图中,然后以某种方式对其进行动画处理?我不确定 UIView 与动画 CALayers 的关系。
      • 没关系。我能够弄清楚。我将包含日期选择器的视图添加到窗口并使用 [UIView beginAnimations] 块对其进行动画处理
      • 伙计们,请参阅下面的 Oded Bex Dov 的解决方案。只要您为 iOS 3.2 或更高版本编写代码,您就可以让框架为您设置动画并与键盘一起管理选择器。绝对是正确的做法。
      【解决方案4】:

      如果您不想接受来自键盘的用户输入,为什么还要使用文本字段?而是使用 UILabel 子类(在其中覆盖 touchesBegan/Ended:withEvent: 方法集以显示 UIDatePicker)或 UIButton(您的操作是向上滑动 UIDatePicker 的方法)。

      【讨论】:

        猜你喜欢
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        相关资源
        最近更新 更多