Ios tableView:DidDeceloseRowAtIndexPath:在第一个用户启动选择和取消选择之前不会调用

Ios tableView:DidDeceloseRowAtIndexPath:在第一个用户启动选择和取消选择之前不会调用,ios,cocoa-touch,uitableview,Ios,Cocoa Touch,Uitableview,我有一个带有四个单元格的UITableView,处于单一选择模式。首次加载视图时,我根据存储的首选项,使用-selectRowAtIndexPath:animated:scrollPosition:以编程方式选择一个单元格。之后,用户可以与表进行交互 每次用户点击任何单元格时,都会在我的表视图委托上调用方法-tableView:willselectRowatineXpath:和-tableView:didselectRowatineXpath:。但是,-tableView:willDeselec

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

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


知道为什么会这样吗?除了为每个单元格手动调用
-[UITableView selectRowAtIndexPath:animated://code>之外,还有其他解决方法吗?

这太长了,无法发表评论,因此我将此作为答案发布

刚刚用tableView创建了测试项目。我在
viewdiload
上调用
[UITableView selectRowAtIndexPath:animated:
,我选择了一个单元格。然后我选择另一个单元格(不取消选择第一个单元格)

我有以下输出:

[SDTVTViewController tableView:willSelectRowAtIndexPath:]    
[SDTVTViewController tableView:willDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didSelectRowAtIndexPath:]
我取消选择了第一个单元格,选择了第二个单元格


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

我正在包装初始数据源更新,并
-SelectRowatineXpath:…
调用

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

显然,就像
-reloadData
,这会清除当前选择(不确定这是否是出于设计)。我将调用移动到
-selectRowatineXpath:…
之后的
-endUpdates
,现在一切都正常了。

如果调用[UITableView selectRowatineXpath:animated:]太快,并且使用的是UITableViewController,则可能与UIViewController ClearSelectionNoviewMillappear冲突(默认为是)。请尝试设置self.clearselectiononviewwillappear=NO;在您的viewDidLoad中,您试图在选择后立即取消对
UITableViewCell
的选择?不完全是。一个单元格(称为cellA)是以编程方式选择的。我希望用户能够通过点击另一个单元格来取消选择cellA,但实际上,在用户亲自点击cellA之前,这不起作用。是的,我也有同样的问题。您需要调用
SelectRowatinePath:animated:scrollPosition:
方法将状态设置为选中。检查我的答案