弹出详细信息视图后自动取消选择表视图单元格?

时间:2012-01-11 17:23:22

标签: iphone ios cocoa-touch uitableview

我被这一段时间困扰了......

当您点击iPhone的Apple手机应用程序中的联系人单元格(进入带有联系人详细信息的视图)并点击上一个视图时,会有一个简短的动画(从蓝色变为白色),显示取消选择细胞。这是Apple自己的应用程序中所有表视图的行为,以及根据其人机界面指南推荐的行为。

然而,在我自己的项目中,我一直无法复制这种行为。当我从详细视图返回时,UITableView中的所有单元格都没有被选中。

我查看了Apple文档中的CoreDataBooks示例代码,该代码具有所需的单元格取消选择行为,并且表格视图似乎“自动”获取行为(没有任何特定实现)。

我也尝试在这些非常相似的问题中实施解决方案:

What deselect selected cell when navigationController pops a view?

iPhone UITableView cells stay selected

UITableView doesn't keep row selected upon return

但是我总是得到相同的结果 - 当我返回时,UITableView中的所有单元格都没有被选中。 (即使在视图控制器的[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated];方法中添加-viewWillAppear:之后。)

在一个问题的评论中也建议[[self tableView] reloadData];-viewWillAppear:可能导致细胞不被选中。但是,CoreDataBooks做了同样的事情,并且仍然具有所需的行为(看似没有任何特定的代码)。

有关如何解决问题的任何建议?提前谢谢。

另外,我不太明白为什么取消选择单元格的代码应该在-viewWillAppear:(而不是-viewDidAppear:)中实现。在屏幕上显示表格视图之前,这不会导致一切发生吗?这可能只是因为我对视图的生命周期缺乏正确的理解,但任何澄清都会很好。再次感谢。

2 个答案:

答案 0 :(得分:2)

您是否尝试过UITableViewController的clearsSelectionOnViewWillAppear属性(不仅仅是tableview而是tableviewcontroller)?如果将其设置为NO,则会使选择保持蓝色 为了获得理想的效果,您可能还需要添加对中的呼叫 - (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated
确保它不会永远保持蓝色。

查看UITableView Documentation的概述部分,开始使用。

// // EDIT 如下面的评论中所述,我们最终做的是将呼叫转移到[[self tableview] reloadData];viewDidAppear。 我的猜测是CoreDataBooks有一个足够复杂的表(包括章节和书籍,章节和书籍),事情的发生时间正在发生。

答案 1 :(得分:1)

如果要取消选择单元格,请使用- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated并使用[self.tableView deselectRowAtIndexPath:indexPath animated:YES];[tableView deselectRowAtIndexPath:indexPath animated:YES];