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

我被这个难住了一阵子......

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

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

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

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

navigationController弹出视图时取消选定单元格的内容?

iPhone UITableView单元保持选定状态

UITableView在返回时不保留行

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

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

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

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


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

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

// EDIT //如下面的注释中所述,我们最终做的是将调用移动到[[self tableview] reloadData];viewDidAppear
我的猜测是CoreDataBooks有足够复杂的表格(包括章节和书籍以及章节和书籍),表明事件发生的时间正在发生变化。


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

链接地址: http://www.djcxy.com/p/10301.html

上一篇: Automatic deselection of table view cell after popping detail view?

下一篇: Why it is impossible to access resources in a static way?