用 UIPickerView 优雅地替换 iPhone 键盘

Posted

技术标签:

【中文标题】用 UIPickerView 优雅地替换 iPhone 键盘【英文标题】:Elegantly replace iPhone keyboard with UIPickerView 【发布时间】:2010-11-19 12:35:36 【问题描述】:

我有一个嵌入 UITextFields 的表格视图,用于输入一些数据。它还有两个弹出 UIPickerView 和 UIDatePicker 的字段 - 如 Apple 的 DateCell 示例所示。

大多数情况下它可以工作,但我不知道如何从文本字段键盘干净地过渡到其他选择器 - 一个滑出,一个滑入 - 看起来很奇怪,表格视图上的滚动位置有时会搞砸- 所有内容都从顶部滚动。

我想要做的是替换文本字段键盘而不让它动画消失,也不会将表格视图恢复到完整大小。

有什么线索吗?

【问题讨论】:

【参考方案1】:

首先,这是screencapture showing how this looks。

实现 UITextFieldDelegate 并显示一个包含 UIPickerView 的“弹出窗口”。

- (void)textFieldDidEndEditing:(UITextField *)textField 

    UIPickerView *picker = [[UIPickerView alloc] 
                                 initWithFrame:CGRectMake(0, 244, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];

当键盘消失时,选择器视图随即可见。

如果您想更进一步,您可以像键盘一样为 UIPickerView“滑入”设置动画。

- (void)viewDidLoad 

    //picker exists in the view, but is outside visible range
    picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 480, 320, 270)];
    picker.delegate = self;
    picker.dataSource = self;
    [self.view addSubview:picker];
    [picker release];


//animate the picker into view
- (void)textFieldDidEndEditing:(UITextField *)textField 

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,-236);
    [UIView commitAnimations];



//animate the picker out of view
- (void)textFieldDidBeginEditing:(UITextField *)textField 

    [UIView beginAnimations:@"picker" context:nil];
    [UIView setAnimationDuration:0.5];

    picker.transform = CGAffineTransformMakeTranslation(0,236);
    [UIView commitAnimations];


//just hide the keyboard in this example
- (BOOL)textFieldShouldReturn:(UITextField *)textField 
    [textField resignFirstResponder];
    return NO;

【讨论】:

请注意,这是执行此操作的旧方法。更“现代”的版本将使用 textField 的 inputView 属性。【参考方案2】:

只需将 UITextField 的 inputView 属性设置为 UIPickerView。

【讨论】:

我会查看这个答案,只是没有将其设置为 datepicker 样式:***.com/questions/4777237/…

以上是关于用 UIPickerView 优雅地替换 iPhone 键盘的主要内容,如果未能解决你的问题,请参考以下文章

在 Vim 中优雅地查找和替换

在 Vim 中优雅地查找和替换

在 Vim 中优雅地查找和替换 vi

如何优雅地使用 Windows

python 字符串替换功能 string.replace()可以用正则表达式,更优雅

我将如何更改 CPPickerView(一个简单的 UIPickerView 替换)以使用清晰的背景而不是图像?