问答中心分类: IOS-DidSelectRowatingIndexPath:未被调用
0
Matt Pfefferle 提问 9分钟 前

我正在编写一个iOS应用程序,在选项卡视图中有一个表视图。在我的UITableViewController,我实现了-tableView:didSelectRowAtIndexPath:,但当我在运行时选择一行时,不会调用该方法。不过,正在填充表视图,因此我知道正在调用控制器中的其他表视图方法。
有没有人知道我搞砸了什么才让这件事发生?

29 Answers
0
Dschee 回答 9分钟 前

以防万一有人犯了和我一样愚蠢的错误:
检查方法名称是否符合您的期望didSelect可能会意外获得didDeselect在某种程度上。我花了大约两个小时才发现。。。

user1021430 回复 9分钟 前

同样的问题。这是因为XCode在选择之前自动完成取消选择。

djinne95 回复 9分钟 前

类似地,我将allowsSelection设置为false,这不仅可以删除任何选择突出显示,还可以防止单元格被按下!

0
Dennis Krut 回答 9分钟 前

另一个可能导致问题的因素是未选择的选择类型:
UITableView选择类型
应该是Single Selection对于正常选择,应No Selection.
要以编程方式执行此操作,请执行以下操作:

tableView.allowsSelection = YES
Symmetric 回复 9分钟 前

我经常遇到这种情况,因为我的场景总是处于编辑模式,我总是忘记将默认设置从“编辑期间无选择”更改为“无选择”。

Nikolay Shubenkov 回复 9分钟 前

您可以在ViewController NSParameterAssert(self.tableView.allowsSelection)的-viewDidLoad方法中添加此行;

Dhilip 回复 9分钟 前

对于那些观察tableView的人。接收。已选择项。订阅没有回电话,这是问题和以上修复工程

Nitin Alabur 回复 9分钟 前

当您接管一些代码库时,它会非常有用,它使用带有标记的按钮而不是didSelectRow,并且在情节提要中禁用了此选择🙄

Frostmourne 回复 9分钟 前

这是tableView的默认行为吗?

0
bugloaf 回答 9分钟 前

另一种可能性是UITapGestureRecognitor可能正在吞噬事件,这里就是这样:https://stackoverflow.com/a/9248827/214070
我没有怀疑这个原因,因为桌子上的单元格仍然会高亮显示蓝色,就好像水龙头正在接通一样。

coolcool1994 回复 9分钟 前

这是我的问题!非常感谢!!我的意思是,它以前显然工作过,但在我实现UITapGestureRecognizer*点击=[[UITapGestureRecognizer alloc]initWithTarget:self-action:@selector(dismisskeeboard)]后停止工作;[self.view addgesturecognizer:点击];

nizx 回复 9分钟 前

我遇到了与您刚刚实现的@coolcool1994相同的问题[tap setCancelsTouchesInView:NO];解决了这个问题。

Alexmelyon 回复 9分钟 前

谢谢,这对我有帮助。就我而言didSelectRowAtIndexPath只有在中删除单元格后才有效commitEditingStyle. 然后我做UITapGestureRecognizer并且在tapAction:得到了indexPath从…起sender.view([self.tableView indexPathForCell:sender.view])然后打电话[self.tableView.delegate didSelectRowAtIndexPath:myIndexPath]

Udaya Sri 回复 9分钟 前

这也是我的问题。。添加代码以删除tableview中的点击手势&它的工作方式类似于charm-(UITableViewCell*)tableview:(UITableView*)tableview cellForRowAtIndexPath:(nsindepath*)indexPath{UITapGestureRecognizer*手势=[[UITapGestureRecognizer alloc]init];手势.cancelsTouchesInView=NO;[self.tableview addgesturecognizer:手势];}

Ariven Nadar 回复 9分钟 前

感谢nizx,swift 4水龙头cancelsTouchesInView=false

0
Old McStopher 回答 9分钟 前

所有答案都很好,但还有一个需要注意。。。
(尤其是以编程方式创建UITableView时)
确保tableView可以通过设置响应选择[tableView setAllowsSelection:YES];或者删除将其设置为NO.

alex-i 回复 9分钟 前

我要补充一点setAllowsSelectionDuringEditing:到列表(当tableview处于编辑模式时)

Sasho 回复 9分钟 前

非常感谢。在IB中,我必须将“选择”部分的值更改为Single Selection.

0
Bartłomiej Semańczyk 回答 9分钟 前

如果出现问题UITapGestureRecognizer您可以修复此问题:

  • 在情节提要中:

在此处输入图像描述
使用代码Objective-C:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; 
[self.view addGestureRecognizer:tap];

[tap setCancelsTouchesInView:NO];

使用代码Swift:

let tap = UITapGestureRecognizer(target: self, action:Selector("dismissKeyboard"))
view.addGestureRecognizer(tap)

tap.cancelsTouchesInView = false