0

我有UITableView四个单元格,处于单选模式。首次加载视图时,我会-selectRowAtIndexPath:animated:scrollPosition:根据存储的首选项以编程方式选择其中一个使用的单元格。在此之后,用户可以与表进行交互。

每次用户点击任何单元格时,都会在我的表格视图委托上调用方法-tableView:willSelectRowAtIndexPath:和。-tableView:didSelectRowAtIndexPath:但是,-tableView:willDeselectRowAtIndexPath:并且-tableView:didDeselectRowAtIndexPath:(即 DEselect)在用户手动点击第一个以编程方式选择的单元格之前不会开始被调用。

知道为什么会发生这种情况吗?除了手动调用-[UITableView selectRowAtIndexPath:animated:]除用户点击的单元之外的每个单元之外,还有其他解决方法吗?

4

3 回答 3

1

如果您过早调用 [UITableView selectRowAtIndexPath:animated:] 并且您正在使用 UITableViewController,则您可能与 UIViewController clearsSelectionOnViewWillAppear 冲突(默认为 YES)。尝试设置 self.clearsSelectionOnViewWillAppear = NO; 在你看来DidLoad

于 2014-12-11T12:05:33.397 回答
0

我正在包装我的初始数据源更新和-selectRowAtIndexPath:...调用

[_tableView beginUpdates];
// ...
[_tableView endUpdates];

显然,就像-reloadData,这​​会清除当前选择(不确定这是否是设计使然)。我将呼叫移至-selectRowAtIndexPath:...之后-endUpdates,现在一切都按预期工作。

于 2013-07-01T20:17:36.343 回答
0

评论太长了,所以我将其发布为答案。

刚刚用 tableView 创建了测试项目。我打电话[UITableView selectRowAtIndexPath:animated:]viewDidLoad我选择了一个单元格。然后我选择另一个单元格(不取消选择第一个单元格)。

我有这个输出:

[SDTVTViewController tableView:willSelectRowAtIndexPath:]    
[SDTVTViewController tableView:willDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didSelectRowAtIndexPath:]

我取消选择了第一个单元格并选择了第二个单元格。

我不知道,为什么它在您的代码中不起作用。当你打电话时,你可以发布你已经实现[UITableView selectRowAtIndexPath:animated:]的方法的代码吗?UITableViewDelegate

于 2013-07-01T17:08:09.027 回答