我有一个UITableView
,有四个单元格,处于单选模式。首次加载视图时,我会根据存储的首选项以编程方式使用-selectRowAtIndexPath:animated:scrollPosition:
选择一个单元格。在此之后,用户可以与表进行交互。
每次用户点击任何单元格时,我的表视图委托都会调用方法-tableView:willSelectRowAtIndexPath:
和-tableView:didSelectRowAtIndexPath:
。但是,在用户手动点击第一个以编程方式选择的单元格之前,-tableView:willDeselectRowAtIndexPath:
和-tableView:didDeselectRowAtIndexPath:
(即DEselect)才会开始被调用。
知道为什么会这样吗?除了用户点击的那个单元格之外,除了为每个单元格手动调用-[UITableView selectRowAtIndexPath:animated:]
之外,还有其他解决方法吗?
答案 0 :(得分:1)
如果您过早调用[UITableView selectRowAtIndexPath:animated:]并且您正在使用UITableViewController,则可能与UIViewController clearsSelectionOnViewWillAppear(默认为YES)冲突。尝试设置self.clearsSelectionOnViewWillAppear = NO;在你的viewDidLoad
中答案 1 :(得分:0)
评论时间过长,所以我将此作为答案发布。
刚用tableView创建了测试项目。我在[UITableView selectRowAtIndexPath:animated:]
上拨打viewDidLoad
,我选择了一个小区。然后我选择另一个单元格(没有取消选择第一个单元格)。
我有这个输出:
[SDTVTViewController tableView:willSelectRowAtIndexPath:]
[SDTVTViewController tableView:willDeselectRowAtIndexPath:]
[SDTVTViewController tableView:didDeselectRowAtIndexPath:]
[SDTVTViewController tableView:didSelectRowAtIndexPath:]
我取消选择第一个单元格,然后选择第二个单元格。
我不知道,为什么它不适用于您的代码。当您致电[UITableView selectRowAtIndexPath:animated:]
时,您是否可以发布已实施的UITableViewDelegate
方法代码?
答案 2 :(得分:0)
我在
中包装了我的初始数据源更新和-selectRowAtIndexPath:...
调用
[_tableView beginUpdates];
// ...
[_tableView endUpdates];
显然,就像-reloadData
一样,这会清除当前的选择(不确定是否是设计)。我将调用移至-selectRowAtIndexPath:...
后-endUpdates
,现在一切正常。