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
可能与它有关。
- 单击UITableview单元格内的search时出现错误的结果
- 如何select另一个表行时将自定义图标删除到UITableViewCellAccessoryCheckmark
- dynamicUITableView里面的静态单元格
- 为什么不能设置cell.selectionStyle = UITableViewCellSelectionStyleBlue?
- 在UITAbleView中缓慢加载来自URL的图像。
- 具有两个自定义单元(多个标识符)的UITableView
- 如何在iOS中单击UIButton时将项目插入UITableView
- 滚动时在UITableViewCells中滑动
- 刷新UITableView在第三个单元格后崩溃后滚动到顶部