iphone – didSelectRowAtIndexPath:只在长按自定义单元格后被调用

我正在创build一个基于表视图的应用程序。 我为表创build了一个自定义表格单元格,其中包含2个标签,1个图像和1个button。 表视图数据源方法正常工作。 我为自定义单元格和视图控制器类使用xib,并将委托和数据源连接到文件的所有者。 但问题是,当我select表行,didSelectRowAtIndexPath没有得到消防。 如上所述,唯一的办法是按住电池约3-4秒钟。 有谁知道为什么会发生这种情况?

感谢任何指针…

这是我的表格视图的方法..

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [finalAddonsArray count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; NewCustomCell *cell = (NewCustomCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { NSArray *nib=[[NSBundle mainBundle]loadNibNamed:@"NewCustomCell" owner:self options:nil]; cell=[nib objectAtIndex:0]; } Addons *addons1=[[Addons alloc]init]; addons1= [finalAddonsArray objectAtIndex:indexPath.row]; if (addons1.data == nil) { cell.ivCategory.image = [UIImage imageNamed:@"blogo.jpg"]; } else { cell.ivCategory.image=[UIImage imageWithData:addons1.data]; } cell.lblTitle.text = addons1.name; if (addons1.price == nil) { cell.lblPrice.text = nil; } else{ cell.lblPrice.text = [NSString stringWithFormat:@"%@ rs",addons1.price]; } [cell.button addTarget:self action:@selector(editButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; cell.button.tag=indexPath.row; index = indexPath; cell.selectionStyle = UITableViewCellSelectionStyleGray; return cell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"sjcjksbcjksbcfkebscf1234567890"); } 

还有一件事我得到,如果我使用默认的UITableViewCell而不是自定义单元格,那么我的问题也是一样的,委托方法没有得到火。

自定义单元格属性

在这里输入图像说明在这里输入图像说明

同样的问题发生在我身上,因为我在其上添加了一个轻击手势识别器。 如果您使用过任何手势识别器,请尝试将其移除并检查是否导致问题。

编辑:阿里评论的解决scheme:如果您使用了轻按手势,您可以使用[tap setCancelsTouchesInView:NO];

我遇到了类似的问题:

对我来说,问题是因为我的UITableView被添加到一个UIScrollView ,更具体地说,它的contentView 。 看来,在contentView ,我不得不保持按2-3秒来触发didSelectRowAtIndexPath方法。

我将我的TableView移动到self.view而不是contentView ,它解决了问题!

也许你会打电话给方法

[tableView deselectRowAtIndexPath:indexPath animated:NO];

在推视图控制器或其他操作之前。 喜欢

 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // 1. manual call this method to deSelect Other Cell [tableView deselectRowAtIndexPath:indexPath animated:NO]; // 2. than do other operation PushViewController Or Some Animation .... } 

这是解决我的问题。

亲爱的,我面临同样的问题。 当我点击的单元格,但did notlectrowowatindexpath不被称为比它突然被称为当我按下button几秒后释放button。

如果您遇到同样的问题,则必须有1. UITapGestureRecognizer正在为您创build问题,或者2.您在其中放置了表视图的滚动视图。

因此,您应该删除放置表格视图的手势或超级滚动视图

如果您的视图上有自定义的手势对象,请selectoverride func gestureRecognizerShouldBegin(_ gesture: UIGestureRecognizer) -> Bool委托。 将自定义手势与发送者手势进行比较,如果不是自定义手势对象,则将其传递给超级手势。 所以系统手势/水龙头不会被阻止。

我不确定这一点,但Delays Content Touches可能与它有关。