在以编程方式选择行之后,未调用UITableView didSelectRowAtIndexPath

时间:2013-10-20 21:34:00

标签: ios objective-c uitableview didselectrowatindexpath

在我的应用执行期间的各个时刻,需要以编程方式选择一行UITableView

[self.tableView selectRowAtIndexPath:selectedCellIndexPath animated:false scrollPosition:UITableViewScrollPositionMiddle];

此工作正常,行突出显示并在后端标记为已选中。该表配置为允许多个选择。

但是,如果用户随后取消选择此行,则不会调用“didSelectRowAtIndexPath”函数。奇怪的是,如果他们重新选择它,就会按照预期再次调用该函数。

知道可能出现什么问题吗?选择行时是否还有其他属性或应该重置的内容?

4 个答案:

答案 0 :(得分:3)

实施UITableViewDelegate协议 .H:

@interface YourView : UIView <UITableViewDataSource,UITableViewDelegate>

然后在.m:

self.tableView.delegate = self;

然后写:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath[
}

您的方法将被调用

答案 1 :(得分:1)

如果用户随后取消选择该行,则将调用关联的UITableViewDelegate方法:

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath

答案 2 :(得分:1)

UITableViewDelegate中选择/取消选择行有两种方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

`- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath`

答案 3 :(得分:0)

一般来说,如果从代码触发操作,则不应该期望调用委托方法。它们只会由用户交互触发。如果以编程方式将单元格设置为选中,则取消选择的用户交互很自然会触发关联的委托方法。