弹出详细视图后自动取消选择表视图单元格?
我被这个难住了一阵子......
当您点击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];
。
上一篇: Automatic deselection of table view cell after popping detail view?
下一篇: Why it is impossible to access resources in a static way?