我正在实现一个UITableView并实现了- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
方法,并且在该方法中我有if循环(下面):
NSInteger row = [indexPath row];
if (self.someDetailViewController == nil) {
if (row==0) {
OneTableViewController *aDetail = [[OneTableViewController alloc] initWithNibName:@"OneDetail" bundle:nil];
self.oneDetailViewController = aDetail;
[aDetail release];
} else if (row==1) {
OneTableViewController *aDetail = [[OneTableViewController alloc] initWithNibName:@"TwoDetail" bundle:nil];
self.oneDetailViewController = aDetail;
[aDetail release];
}
}
但是每次我在表视图中选择一些东西(比如说第0行)我都会进入二级视图(OneDetail),然后当我回去并选择另一行(第一行)时,我希望转到其他视图(TwoDetail)然而我被带到OneDetail(首先选择的原始行) - 当用户点击另一行时,它们是如何被带到最初的第一行的辅助视图窃听。反之亦然(即选择第1行并被带到TwoDetail然后返回并选择第0行并且也被带到TwoDetail 不 OneDetail ......
我想知道当用户按下后退按钮或如何以其他方式克服我的问题时,是否有人知道如何'重启'if循环。非常感谢提前!
答案 0 :(得分:0)
这不是循环。
您将详细视图控制器存储在实例变量oneDetailViewController
中。
只有当someDetailViewController
为nil时,最有可能的情况才是第一次执行该方法时,您将分配一个值。
使用“oneDetail”初始化的视图控制器。
很遗憾,您不会向我们展示剩余的代码。我假设你没有声明
self.someDetailViewController = nil;
在该方法中进一步向下。
为什么哟这样做==无论如何?什么是详细视图控制器在进一步处理中有用?只需在didSelectRowAtIndexPath
结束时释放它,并在下次执行时创建一个新的。不需要保存它的实例变量。
不过,如果你有充分的理由知道这段不同寻常的代码,你没有与我们分享,那么我们当然可以就如何实现这一点提出建议 - 如果你告诉我们的话:)
答案 1 :(得分:0)
我怀疑第二次输入方法时,此检查返回false:
if (self.someDetailViewController == nil)
因此,你永远不会进入你检查哪一行的部分,而且你永远陷入了你先设置的那一行。