在不取消选择命令的情况下取消选择单元格

时间:2013-01-09 09:16:08

标签: php objective-c noop

通常我的典型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
}

2 个答案:

答案 0 :(得分:3)

这是UITableViewController的默认行为,请参阅clearsSelectionOnViewWillAppear的文档:

  

此属性的默认值为YES。当YES时,表格视图   控制器在收到表时清除表的当前选择   viewWillAppear:消息。将此属性设置为NO会保留   选择。

答案 1 :(得分:1)

更新:按viewWillAppear行仍处于选中状态。通过viewDidAppear,它不再是。他们之间有[table reload]。看起来[table reload]取消选择该行。