【发布时间】:2012-02-08 01:44:21
【问题描述】:
我已经被这件事难住了一段时间......
当您在 iPhone 的 Apple 电话应用程序中点击联系人的单元格(进入包含联系人详细信息的视图)并点击返回上一个视图时,会有一个简短的动画(从蓝色变为白色)显示取消选择细胞。这是 Apple 自己的应用程序中所有表格视图的行为,也是根据其人机界面指南推荐的行为。
但是,在我自己的项目中,我一直无法复制这种行为。当我从详细视图返回时,我的UITableView 中的任何单元格都没有被选中。
我查看了 Apple 文档中的 CoreDataBooks 示例代码,它具有所需的单元格取消选择行为,并且表格视图似乎“自动”获取该行为(没有任何特定实现)。
我也尝试在这些非常相似的问题中实施解决方案:
What deselect selected cell when navigationController pops a view?
iPhone UITableView cells stay selected
UITableView doesn't keep row selected upon return
但我总是得到相同的结果——当我返回 UITableView 时,没有一个单元格被选中。 (即使在视图控制器的-viewWillAppear: 方法中添加了[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow] animated:animated];。)
在一个问题的 cmets 中还建议,在 -viewWillAppear: 中包含 [[self tableView] reloadData]; 可能会导致单元格不保持选中状态。但是 CoreDataBooks 做了同样的事情,并且仍然具有所需的行为(似乎),没有任何特定的代码。
关于如何解决问题的任何建议?提前致谢。
顺便说一句,我不太明白为什么取消选择单元格的代码应该在-viewWillAppear:(而不是-viewDidAppear:)中实现。在表格视图显示在屏幕上之前,这不会导致一切都发生吗?这可能只是由于我对视图的生命周期缺乏正确的理解,但任何澄清都会很好。再次感谢。
【问题讨论】:
-
以防万一,我使用的是 Xcode 4.2 和 iPhone 5.0 模拟器。我的项目使用 ARC。
-
从 viewWillAppear 调用 deselction 方法时,您是否调试过 indexpath 的值?当时存在什么?
-
不确定我是否正确执行此操作,但我尝试记录
indexPathForSelectedRow的返回值,并且部分和行都是“(null)”。 -
这是主要问题,您没有保留要选择的单元格索引的值。您还需要存储这些,然后需要调用此方法。
-
我在电子邮件中提到,这并不是问题的真正答案,而是一种解决方法。实际上,我仍然希望有人能够提供一个真正的答案(例如,为什么 CoreDataBooks 似乎没有具体的实现而一切正常)。
标签: iphone ios cocoa-touch uitableview