我遇到了从表格单元格传递到tableView
或轻松说出didSelectRowAtIndexPath
的问题。
我创建了自定义UITableViewCell
。它有两个手势识别器
UIGestureRecognizer* panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];
panRecognizer.delegate = self;
[self addGestureRecognizer:panRecognizer];
panRecognizer.cancelsTouchesInView = NO;
UIGestureRecognizer* tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
tapRecognizer.delegate = self;
[self addGestureRecognizer:tapRecognizer];
tapRecognizer.cancelsTouchesInView = NO;
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
return YES;
}
但是,尽管cancelsTouchesInView=NO
didSelectRowAtIndexPath
没有被调用,但问题仍然存在。
而且我关闭了细胞内所有物体的相互作用。像
userInteractionEnabled = NO
但它没有帮助。似乎tableview没有触及...... 另一方面,单元格手势识别器内部工作正常。
有没有人有任何想法didSelectRowAtIndexPath
无法工作的原因是什么?
提前致谢。
编辑:似乎问题不在UIGestureRecognizer
中。我试图删除它们,但它没有帮助。 UITableView
得到平移手势(因为工作滚动),但是点击手势消失了......
有没有办法调试手势事件?
答案 0 :(得分:2)
每次需要在TableViewCell中定义自定义难处理元素时,您需要编写协议UITableViewCellDelegate并将表分配为每个单元格的委托
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
CustomTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CustomTableViewCellIdentifier forIndexPath:indexPath];
cell.delegate = self;
. . . . . . .
}
- (void) tableViewCell:(UITableViewCell*)tableViewCell gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer
{
CGPoint locationInCell = [gestureRecognizer locationInView: tableViewCell];
. . . . . . .
}
此处类型是互动类型的枚举 - 点击或平移。
然后你需要在handlePan和handleTap单元格方法中使用适当的类型调用此协议方法。
答案 1 :(得分:0)
你可以试试这个..
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer {
if ([gestureRecognizer view] isKindOfClass:[UITableViewCell class]
return NO;
return YES;
}