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];
}

这接近我需要做的吗?

4

2 回答 2

2

我可以建议看看本教程“Sliding UITextFields around to Avoid the keyboard”。

在您的情况下,您需要将它们的代码放入textFieldDidBeginEditing您的pickerShown方法中,并改为将它们用于键盘高度的常量更改为选择器高度。

希望这可以帮助 :)

于 2012-08-08T23:35:08.027 回答
0

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

/* 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];
}
于 2012-08-09T05:26:38.710 回答