iOS:在显示键盘时,将活动的UITextField保持在屏幕中间

时间:2012-10-04 10:33:40

标签: ios xcode keyboard scroll

我有一个带有一些静态单元格的UITableViewController(用UITextFields填充)。现在我想将活动的UITextField保持在我的屏幕中间(即使我上/下一个Cell / UITextfield)。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

我过去做了几次这样的事情,虽然不太喜欢。 我的解决方案是用桌子移动视图,这样选定的单元格就可以保持可见。

首先我添加了一些观察者来了解键盘出现或消失的时间

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];

然后我做了类似这样的事情来推动桌子:

- (void)keyboardWillShowNotification:(NSNotification*)notification {


    CGSize kbSize = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGPoint newCenter = self.myable.center;

    NSLog(@"Height: %f Width: %f", kbSize.height, kbSize.width);
    // Portrait:    Height: 264.000000  Width: 768.000000
    // Landscape:   Height: 1024.000000 Width: 352.000000

    if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
        newCenter = CGPointMake(newCenter.x, heightP - kbSize.height - self.myTable.frame.size.height/2);
    }
    else {
        newCenter = CGPointMake(newCenter.x, heightL - kbSize.width - self.myTable.frame.size.height/2);
    }



    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];
    self.myTable.center = newCenter;
    [UIView commitAnimations];
}

- (void)keyboardWillHideNotification:(NSNotification*)notification {
    NSLog(@"keyboard disappeared");
    double animationDuration = [[[notification userInfo] objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];
    CGPoint newCenter = self.myTable.center;

    if([[UIApplication sharedApplication] statusBarOrientation] < 3) {
        newCenter = CGPointMake(newCenter.x, 0 + self.lmyTable.frame.size.height/2);
    }
    else {
        newCenter = CGPointMake(newCenter.x, 0 + self.myTable.frame.size.height/2);
    }



    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:animationDuration];
    self.myTable.center = newCenter;
    [UIView commitAnimations];

}

基本上,我读了键盘高度并将其添加到桌子的中央,将其向上推,然后在键盘消失时移除相同的高度。

现在,有一个问题! 我从代码中删除了它,因为它非常具体,但是只有当键盘覆盖您的单元格时,您必须小心移动表 !否则,您最终会将可见单元格推到屏幕顶部。 这很大程度上取决于你的视图设置,边框,桌子的大小等等,所以我不能帮你这一部分,但我希望你有基本的想法!

祝你好运

答案 1 :(得分:0)

更简单...在您的tableview的委托didSelectRowAtIndexPath中使用scrollToRowAtIndexPath:<#(NSIndexPath *)#> atScrollPosition:<#(UITableViewScrollPosition)#> animated:<#(BOOL)#>滚动到您的单元格。您可能必须为此更改tableview的框架,并在取消选择单元格后再将其更改回来。或者我们滚动插入属性滚动。