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];
。