我已经被这个难住了一段时间了......
当您在 iPhone 的 Apple 电话应用程序中点击联系人的单元格(进入包含联系人详细信息的 View )并点击返回上一个 View 时,会出现一个简短的动画(从蓝色渐变为白色)显示取消选择细胞。这是 Apple 自己的应用程序中所有表格 View 的行为,也是根据他们的人机界面指南推荐的行为。
但是,在我自己的项目中,我一直无法复制这种行为。当我从详细 View 返回时,我的 UITableView
中的单元格都没有被选中。
我查看了 Apple 文档中的 CoreDataBooks 示例代码,它具有所需的单元格取消选择行为,并且表格 View 似乎“自动”获得了行为(没有任何特定的实现)。
我还尝试在这些非常相似的问题中实现解决方案:
What deselect selected cell when navigationController pops a view?
iPhone UITableView cells stay selected
UITableView doesn't keep row selected upon return
但我总是得到相同的结果——当我返回它时,UITableView
中的单元格都没有被选中。 (即使在 View Controller 的 -viewWillAppear:
方法中添加了 [tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated];
之后。)
在一个问题的评论中还建议在 -viewWillAppear:
中使用 [[self tableView] reloadData];
可能会导致单元格无法保持选中状态.但是 CoreDataBooks 做了同样的事情,并且在没有任何特定代码的情况下仍然具有所需的行为(表面上)。
有什么解决问题的建议吗?提前致谢。
附带说明一下,我不太明白为什么要在 -viewWillAppear:
(而不是 -viewDidAppear:
)中实现取消选择单元格的代码。这不会导致所有事情都发生在表格 View 显示在屏幕上之前吗?这可能只是由于我对 View 的生命周期缺乏正确的理解,但任何澄清都会很好。再次感谢。
最佳答案
您是否尝试过 UITableViewController(不仅仅是 tableview,而是 tableviewcontroller)的 clearsSelectionOnViewWillAppear 属性?如果您将它设置为 NO
,它将使选择保持蓝色。
为了获得您想要的效果,您可能还需要添加对
的调用
- (void)deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated
以确保它不会永远保持蓝色。
查看 UITableView Documentation 的概述部分开始。
//编辑//
正如下面的评论所述,我们最终所做的是将对 [[self tableview] reloadData];
的调用移动到 viewDidAppear
。
我的猜测是 CoreDataBooks 有一个足够复杂的表(包含部分和书籍以及部分和书籍),一些事情随着事件的时间发生。
关于iphone - 弹出详细 View 后自动取消选择 TableView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823736/