1

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

我怎样才能做到这一点?

4

2 回答 2

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

}

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

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

祝你好运

于 2012-10-04T14:45:04.413 回答
0

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

于 2012-10-04T15:12:07.283 回答