通常我的典型didselectrowatindexpath是这样的:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
BGUIBusinessCellForDisplay * cellBiz = (BGUIBusinessCellForDisplay *) cell;
[BGDetailBusinessViewController detailButtonPressed:cellBiz.biz withNavController:self.navigationController];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
因此,如果一行是selectec,请打开一个新窗口或其他东西。然后快速取消选择该行。不取消选择行意味着当我们返回时,之前选择的行仍将存在。
但是,如果我检查过去的代码,我看到该行已成功取消选择,即使我没有取消选择
我在任何地方都设置了一个陷阱来跟踪取消选择行的位置和时间:
-(void)viewDidAppear:(BOOL)animated
{
...
PO(self.tableView.indexPathForSelectedRow); //always show null here
while(false);
}
由viewDidAppear调出,比如我从详细信息返回后,self.tablevView.indexPathForSelectedRow已经为空。那么行已被取消选择但是何时何地?
我在明显的地方放了更多陷阱
-(void)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
while (false);//breakpoint here never called
}
-(void) tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *) indexPath
{
while (false); //breakpoint here never called
}
这些都没有被召唤过。
我放弃了。
现在不大,但这让我感到困惑
这是完整的didSelectRowForIndexPath,因此你可以验证那里没有desellect命令
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
if ([cell isKindOfClass:[BGUIBusinessCellForDisplay class]])
{
BGUIBusinessCellForDisplay * cellBiz = (BGUIBusinessCellForDisplay *) cell;
[BGDetailBusinessViewController detailButtonPressed:cellBiz.biz withNavController:self.navigationController];
}
else if ([cell isKindOfClass:[BGAddMoreBusiness class]])
{
BGBusinessEditViewController * editBusiness = [[BGBusinessEditViewController alloc]init];
[self.navigationController SafelyPushController:editBusiness];
}
PO(self.tableView.indexPathForSelectedRow); //not null here
}
答案 0 :(得分:3)
这是UITableViewController
的默认行为,请参阅clearsSelectionOnViewWillAppear
的文档:
此属性的默认值为
YES
。当YES
时,表格视图 控制器在收到表时清除表的当前选择viewWillAppear:
消息。将此属性设置为NO
会保留 选择。
答案 1 :(得分:1)
更新:按viewWillAppear
行仍处于选中状态。通过viewDidAppear
,它不再是。他们之间有[table reload]
。看起来[table reload]
取消选择该行。