UITableView无法正确滚动(或根本不滚动)

时间:2011-03-09 10:47:50

标签: iphone objective-c cocoa-touch

我正在尝试在UITableView中滚动,同时显示键盘。我调整了TableView的大小,使其不被键盘覆盖。我覆盖了textFieldShouldReturn函数,跳转到我的UITableView中的下一个UITextField,并滚动到下一个字段。这是我使用的代码:

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    UITableViewCell *cell = (UITableViewCell *)[textField superview];
    NSIndexPath *indexPath = [self.prefTableView indexPathForCell:cell];
    NSString *nextRowKey = [preferences nextRowKeyAtIndexPath:indexPath];
    [textField resignFirstResponder];
    if (nextRowKey != nil) {
        tagBeingEdited = textField.tag + 1;
        NSIndexPath *nextIndexPath = [NSIndexPath indexPathForRow:indexPath.row+1
                                                    inSection:indexPath.section];

        [self.prefTableView scrollToRowAtIndexPath:nextIndexPath
                                  atScrollPosition:UITableViewScrollPositionTop
                                          animated:YES];
        //[self.prefTableView selectRowAtIndexPath:nextIndexPath 
        //                                animated:YES
        //                          scrollPosition:UITableViewScrollPositionMiddle];
        if ([[self.prefTableView indexPathsForVisibleRows] containsObject:indexPath] == YES) {
            [[self.prefTableView viewWithTag:tagBeingEdited] becomeFirstResponder];
        }
    } else {
        isEditing = NO;
    }
    return NO;
}

但是,我的视图从不滚动。或者,如果我手动滚动视图,它将返回到顶部。为什么呢?

注意:我只使用scrollToRowAtIndexPath和selectRowAtIndexPath之一。我把它们都放在那里,因为我先尝试了一个,然后是另一个。

1 个答案:

答案 0 :(得分:0)

@occulus是正确的,当键盘出现时,UITableViewController会自动处理调整大小。如果您希望使用UIViewController的子类进行该行为,则需要额外的工作。

Cocoa with love的以下链接就是这样做的一个例子。

http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html