我有以下VC层次结构:ParentViewController - >导航控制器(子VC) - > ViewController(使用UITableView)。
我遇到以下问题: 在UITableViewDelegate.didSelectRowAtIndexPath中,应用程序正在堆栈上推送一个新的ViewController。问题是在这个阶段,表视图会自动重新加载,而不会显式调用reloadData。这个事实会产生一些问题,例如在返回屏幕时(使用“返回”按钮),表格视图在开始时滚动而不是聚焦在所选行上。
你能否帮我找一下为什么会这样,这是一个错误,或者如何解决这个问题?
更新:我刚刚在iOS 7.1上测试了同样的情况并且没有这样的问题,我的意思是推送一个viewController,而不是弹回到包含UITableView的viewController没有松散的焦点选定的行。
答案 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;
}