popup详细视图后自动取消select表视图单元格?

我已经被这个难住了一阵子

当您点击iPhone的苹果手机应用程序中的联系人的单元格(进入带有联系人详细信息的视图),然后点击回到前一个视图时,会出现一个简短的animation(从蓝色变为白色),显示取消select该单元格。 这是苹果自己应用程序中所有表视图的行为,也是根据人机界面指南推荐的行为。

但是,在我自己的项目中,我一直无法复制这种行为。 当我从细节视图返回时,我的UITableView中没有任何单元格被选中。

我查看了Apple的文档中的CoreDataBooks示例代码,该代码具有所需的单元取消select行为,似乎表视图会自动获取行为(不需要任何特定的实现)。

我也试着在这些非常类似的问题上实施解决scheme:

当navigationControllerpopup一个视图时,什么取消选定的单元格?

iPhone UITableView单元保持选定状态

UITableView在返回时不保留行

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

在一个问题的评论中也提到了[[self tableView] reloadData];-viewWillAppear:可能导致单元不能保持选中状态。 但CoreDataBooks做同样的事情,仍然有没有任何特定的代码所需的行为(看似)。

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

在旁注中,我不太明白为什么取消select单元的代码应该在-viewWillAppear:而不是-viewDidAppear: 。 在桌面视图显示在屏幕上之前不会导致一切发生? 这可能只是由于我对视图的生命周期缺乏正确的理解,但是任何澄清都是很好的。 再次感谢。

你有没有尝试用UITableViewController的clearsSelectionOnViewWillAppear属性(不仅仅是一个tableview,而是一个tableviewcontroller)? 如果将其设置为“ NO ,则会使select保持蓝色。
为了得到你想要的效果,你也可能需要添加一个电话
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated
以确保它不会永远保持蓝色。

查看UITableView文档的概述部分以开始。

// EDIT //如下面的注释中所述,我们最终做的是将调用移动到[[self tableview] reloadData]; 查看出现。
我的猜测是,CoreDataBooks有一个复杂的表(与章节和书籍,部分和书籍),事件的时间正在发生。

如果你想取消select一个单元格,使用- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated并使用[self.tableView deselectRowAtIndexPath:indexPath animated:YES];[tableView deselectRowAtIndexPath:indexPath animated:YES];