UITableView didSelectRowAtIndexPath 从未调用

Posted

技术标签:

【中文标题】UITableView didSelectRowAtIndexPath 从未调用【英文标题】:UITableView didSelectRowAtIndexPath never called 【发布时间】:2013-11-16 15:24:35 【问题描述】:

我在采用UITableViewDelegateUITableViewDataSource 协议的UIViewController 中有一个UITableViewnumberOfRowsInSectioncellForRowAtIndexPath 已实现。

情节提要中有数据源和委托的出口。为 TableView 选择了单选。触摸时显示选择被选中。

我在模拟器上运行项目,触摸表格单元格,得到了didHighlightRowAtIndexPath 的调用,但从未调用过didSelectRowAtIndexPathwillSelectRowAtIndexPath

我忘记了什么?什么会以这种方式影响 TableView?

附:我知道,有很多这样的问题,但我花了几个小时谷歌搜索和阅读 ***,但仍然没有解决我的问题。

TestViewController.h:

@interface TestViewController : ViewController <UITableViewDelegate, UITableViewDataSource>

@end

TestViewController.m:

@interface TestViewController ()
@property (strong) IBOutlet UITableView *tableView;
@end

@implementation TestViewController

- (void)viewDidLoad

    [super viewDidLoad];


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

    NSLog(@"selected");


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

    NSLog(@"highlighted");


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    return 2;


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    return 10;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    static NSString *CellIdentifier = @"FilterCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.textLabel.text = @"some text";
    return cell;


@end

【问题讨论】:

您不认为添加代码会有帮助吗?还是您希望我们具备读心术的能力? @vikingosegundo 我会添加它,但没有什么特别的。我什至把我的班级改成了一个简单的班级,只是为了测试 @Serhii Yakovenko,它是从 STableViewController 继承的 ViewController(用于“加载更多”实现)。名字不好,我知道 【参考方案1】:

不看代码很难说,但试试这个:

1) didSelectRowAtIndexPath 来自UITableViewDelegate不是数据源,你连接了吗?!

2) 仔细检查didSelectRowAtIndexPath的签名。从某个受信任的来源复制粘贴它。可能有些地方打错了。

3) 确保插座连接正确。使用调试器将其停止在某处,例如 viewDidLoad 并打印 dataSource 和委托(po self.tableView.dataSource 调试器命令),确保它们指向正确的对象。

4) 行是否在视觉上被选中?也许您在代码或情节提要中将 cell.userInteractionEnabled 设置为 NO?

5)表格视图在情节提要中有一个选择属性:(可以吗?)

6) 也许您的表格处于编辑模式?从调试记录它以查看。

7) 是否从indexPathsForSelectedRows 方法的角度选择了行?如果您覆盖并记录对单元格的 selected 访问器的调用会怎样?

【讨论】:

1) 是的,两者都已连接(委托和数据源)。 didHighlightRowAtIndexPath 被调用。 2)从ios文档复制(以防万一)。 3)记录了两个连接,它们都很好 我看到了单元格高亮的视觉效果和日志;单元格的 userInteractionEnabled 已检查,我没有在代码中更改它;设置了 tableview 的单选。 6) 在 didHighlight tableView.editing 中是 NO;甚至更改为“编辑模式下的单选”也无济于事。 7)我也在 didHighlight 中检查它,它总是为空 哇,我已经通过长按选中了一个单元格(真的很长而且非常不自然),现在我无法选择任何其他单元格。此外,我注意到在故事板或代码中将单元格的选择样式更改为蓝色(从灰色)并没有真正改变它。 问题出在那里使用的库中,但仍然非常感谢您的帮助!【参考方案2】:

我明白了。问题出在项目使用的库中。

我的 ViewController 继承自一个库的 ViewController 实现,它可以捕捉所有的手势。

【讨论】:

请进一步解释以帮助他人,然后选择这就是答案。 这让我每次都感到困惑,检查你的手势识别器,如果你将手势识别器添加到表格视图中,didSelectRowAtIndexPath 将不会运行。 这也让我不止一次@EdwardAnthony。我设法通过不取消视图中的触摸来解决它。 UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; [tapRec setCancelsTouchesInView:NO]; 森林,你真是个天才!

以上是关于UITableView didSelectRowAtIndexPath 从未调用的主要内容,如果未能解决你的问题,请参考以下文章

从选定索引处的表视图中的数组中删除

将数据从 didSelectRowAtIndexPath 传递到另一个视图控制器 ios7

连接 UITableView + UITableView

将 UITableView 推送到 UITableView

UItableview 单元格的动态高度与 UItableview 单元格内的 UItableview

UITableView