当推送新的viewController时,UITableView会重新加载数据

时间:2014-11-08 10:43:12

标签: ios objective-c uitableview uiviewcontroller uinavigationcontroller

我有以下VC层次结构:ParentViewController - >导航控制器(子VC) - > ViewController(使用UITableView)。

我遇到以下问题: 在UITableViewDelegate.didSelectRowAtIndexPath中,应用程序正在堆栈上推送一个新的ViewController。问题是在这个阶段,表视图会自动重新加载,而不会显式调用reloadData。这个事实会产生一些问题,例如在返回屏幕时(使用“返回”按钮),表格视图在开始时滚动而不是聚焦在所选行上。

你能否帮我找一下为什么会这样,这是一个错误,或者如何解决这个问题?

更新:我刚刚在iOS 7.1上测试了同样的情况并且没有这样的问题,我的意思是推送一个viewController,而不是弹回到包含UITableView的viewController没有松散的焦点选定的行。 enter image description here

1 个答案:

答案 0 :(得分:0)

希望这可以帮到你。

我的解决方案是使用navigationviewcontroller委托,在推送另一个时保存选择,并在弹回时设置回来。

我的示例代码(我已将表视图控制器设置为委托)

static NSIndexPath* path = nil;

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if (viewController == self)
    {
        [self.tableView reloadData];
        [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionMiddle];
    }
}

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
     path = self.tableView.indexPathForSelectedRow;
}