首页 文章

如何在显示UIPickerView时向上移动视图

提问于
浏览
0

我有一个主视图,包含我的所有文本字段和按钮 . 对于我的文本字段,我使用inputView来显示UIPickerViews而不是键盘 . 我想知道当选择文本字段时,我可以将视图向上移动,这样拾取器和拾取器工具栏不会覆盖文本字段,因为我在底部有一些被它覆盖的文本字段 . 我已经尝试使用带有表视图的教程中的以下代码,但它对我不起作用 . 它构建没有错误,但它不能正常工作 . 视图刚刚消失,然后只有当pickerView被解除时它才会返回一半 .

- (void)viewDidLoad {
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pickerShown:) name:UIKeyboardDidShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(pickerHidden:) name:UIKeyboardWillHideNotification object:nil];

}

-(void)pickerShown:(NSNotification *)note {
CGRect pickerFrame;
[[[note userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey]   getValue:&pickerFrame];
CGRect scrollViewFrame = mainView.frame;
scrollViewFrame.size.height -= pickerFrame.size.height;
[mainView setFrame:pickerFrame];
}
-(void)pickerHidden:(NSNotification*)note{
[mainView setFrame:self.view.bounds];
}

这接近我需要做的事情吗?

2 回答

  • 0

    对于那些寻找替代解决方案的人来说,这里是one . 我把它变成了一个可以在复杂项目中重复使用的库 .

    /* In Keyboard.m */
    static NSUInteger verticalOffset = 0;
    
    + (void)moveViewForKeyboard:(UITextField *)theTextField inView:(UIView *)view
    {
        /* Move 200 for keyboard, change the number for other types */
        [self moveViewUp:view withOffset:theTextField.frame.origin.y - 200];
    }
    
    + (void)moveViewUp:(UIView *)view withOffset:(int)offset
    {
        if(offset < 0) 
            offset = 0;
    
        if(offset != verticalOffset) 
        {
            [self moveView:view withOffset:offset - verticalOffset];
            verticalOffset = offset;
        }
    }
    
    + (void)moveViewOnEndEditing:(UIView *)view
    {
        if(verticalOffset != 0)
        {
            [self moveView:view withOffset:-verticalOffset];
            verticalOffset = 0;
        }
    }
    
    + (void)moveView:(UIView *)view withOffset:(int)offset
    {
        [UIView beginAnimations:nil context:NULL];
        [UIView setAnimationDuration:0.3];
    
        CGRect rect = view.frame;
        rect.origin.y -= offset;
        rect.size.height += offset;
        view.frame = rect;
    
        [UIView commitAnimations];
    }
    

    并在视图中以这种方式使用它:

    - (void)textFieldDidBeginEditing:(UITextField *)theTextField
    {
        [Keyboard moveViewForKeyboard:theTextField inView:self.view];
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)theTextField
    {
        [Keyboard moveViewOnEndEditing:self.view];
    }
    
  • 2

    我建议你看看this tutorial "Sliding UITextFields around to avoid the keyboard" .

    在您的情况下,您需要将 textFieldDidBeginEditing 中的代码放在 pickerShown 方法中,并改变它们对于拾取器高度的键盘高度的常量 .

    希望这可以帮助 :)

相关问题