UITableView didSelectRowAtIndexPath 从未调用
Posted
技术标签:
【中文标题】UITableView didSelectRowAtIndexPath 从未调用【英文标题】:UITableView didSelectRowAtIndexPath never called 【发布时间】:2013-11-16 15:24:35 【问题描述】:我在采用UITableViewDelegate
和UITableViewDataSource
协议的UIViewController
中有一个UITableView
。 numberOfRowsInSection
和 cellForRowAtIndexPath
已实现。
情节提要中有数据源和委托的出口。为 TableView 选择了单选。触摸时显示选择被选中。
我在模拟器上运行项目,触摸表格单元格,得到了didHighlightRowAtIndexPath
的调用,但从未调用过didSelectRowAtIndexPath
或willSelectRowAtIndexPath
。
我忘记了什么?什么会以这种方式影响 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