TableView与自定义UITextView单元格滚动屏幕上的Navbar

时间:2013-01-04 02:39:24

标签: ios uitableview uitextview

我正在编写一个具有分组tableView的应用程序,该视图具有包含模态segue中的UITextViews的自定义单元格。我希望能够编辑每个单元格/文本视图中的文本。我的问题是滚动视图底部的单元格/文本视图,以便它们出现时出现在键盘上方。

根据评论中的要求编辑:prepareForSegue:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"update info"]) {
        UpdatesTableViewController *uvc = (UpdatesTableViewController *)segue.destinationViewController;
        uvc.dumpInfo = self.dumpInfo;
    }
}

如果我使用UITableView控制器,一切都很好 - 当textview成为firstResponder时,每个单元格/文本视图都会向上滚动到视图的顶部,以便在编辑时可以看到它。但是当tableView滚动时,我添加到tableView顶部的导航栏会滚动。

如果我使用UIViewController并添加导航栏和表视图,我可以使用UITableView scrollToRowAtIndexPath:atScrollPosition:animated:方法滚动单元格。导航栏保持固定。但是底部的单元格无法向上滚动到足以显示。

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    CGPoint location = [textView.superview convertPoint:textView.center toView:self.tableView];
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:location];
    [self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition: UITableViewScrollPositionTop animated:YES];
}

UITableView控制器正在做一些很酷的魔法来使这项工作 - 我想要做的就是将导航栏固定在视图顶部的位置。

1 个答案:

答案 0 :(得分:1)

您可以使用我在评论中提到的UITableViewController中包含的UINavigationController。这将显示屏幕上的默认导航栏,它不会与tableview一起滚动。需要将UITableViewController设置为UINavigationController的rootViewController。

由于您面临[UINavigationController setDumpInfo:]: unrecognized selector sent to instance崩溃,因此您需要将prepareForSegue方法更改为

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"update info"]) {
        UINavigationController *nav = (UINavigationController *)segue.destinationViewController;
        UpdatesTableViewController *uvc = (UpdatesTableViewController *)nav.topViewController;
        uvc.dumpInfo = self.dumpInfo;
    }
}

在这种情况下,基本上在navigationController上调用了dumpInfo而不是tableviewcontroller

相关问题