如何显示和隐藏UIPickerView像iOS键盘?

时间:2013-09-17 04:19:10

标签: ios objective-c

我有这段代码默认隐藏UIPickerView:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_memberList setAlpha:0];
}

这个代码在点击按钮时显示UIPickerView:

- (IBAction)buttonChooseMember {    
    [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{
        [_memberList setAlpha:1];
    } completion:nil];
}

最后一件事是,当用户点击任何地方时隐藏键盘:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    for (UIView * txt in self.view.subviews){
        if ([txt isKindOfClass:[UITextField class]]) {
            [txt resignFirstResponder];
        }else if ([txt isKindOfClass:[UIPickerView class]]) {
            [UIView animateWithDuration:0.6 delay:0. options:UIViewAnimationOptionCurveEaseInOut animations:^{
                [_registerMLMList setAlpha:0];
            } completion:nil];
        }
    }
}

但所有这些只是给我'出现'动画,因为它只是将Alpha值从0改为1(反之亦然)。不像iOS键盘那​​样向上滑动或向下滑动。

我尝试使用下面的动画在UIPickerView上显示iOS键盘外观:

- (IBAction)hidePicker {

    UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set
    float pvHeight = pickerView.frame.size.height;
    float y = _screen.bounds.size.height - (pvHeight * -2); // the root view of view controller
    [UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight);
    } completion:nil];
}

- (IBAction)showPicker {
    UIPickerView *pickerView = [[UIPickerView alloc] init]; // default frame is set
    float pvHeight = pickerView.frame.size.height;
    float y = _screen.bounds.size.height - (pvHeight); // the root view of view controller
    [UIView animateWithDuration:0.5f delay:0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.picker.frame = CGRectMake(0 , y, pickerView.frame.size.width, pvHeight);
    } completion:nil];
}

我喜欢这个动画,它看起来像iOS键盘动画,但这个动画的问题是......当我的应用程序加载时,UIPickerView已经出现了。如何在第一次加载时隐藏它?

谢谢。

3 个答案:

答案 0 :(得分:18)

所有UIResponder个对象都有inputView属性。 inputView的{​​{1}}是响应者becomes the first responder时将显示代替键盘的视图。

因此,如果您希望显示UIResponder而不是键盘,则可以通过让UIPickerView(如UIResponder)拥有UITextField来完成此操作作为UIPickerView

(作为一个警告:你可能不会想要inputView作为UIPickerView,因为你还需要考虑键盘何时会改变大小,就像旋转时一样。但是这一般的想法。)

答案 1 :(得分:1)

viewDidLoad中取一个布尔变量并将其值设置为TRUE,并设置UIPickerView的帧,以便UIPickerView第一次不可见。基于布尔值处理帧动画以显示或隐藏选择器视图。

答案 2 :(得分:1)

hidepicker和showpicker方法的想法很好,并且可以通过设置UIPickerView的框架同时启动它到不应该可见的位置来克服“UIPicker在加载应用程序时可见”的问题。 。之后你可以调用showpicker方法来显示选择器视图。