如何处理触摸事件在UILabel作为UITableViewCell的子视图



我的应用程序有一个自定义的UITableView。在UIViewControllercellForRowAtIndexPath委托方法中,我实例化了包含多个自定义uilabel(实际上是OHAttributedLabel的子类)作为内容视图的子视图的自定义UITableViewCell对象。

我尝试在标签上设置userInteractionEnabled = YES,然后在视图控制器中添加触摸事件,但这不起作用。

想法?

谢谢

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
      UITouch *touch = [[event allTouches] anyObject];
      if (CGRectContainsPoint([self.site frame], [touch locationInView:self.view])){
       //do whatever you want
     }
}

UILabel *label = =[UILabel alloc]init];
label.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture =
[[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap)]     autorelease];
[label addGestureRecognizer:tapGesture];

一个UILabel不是一个UIControl,所以你不会得到事件在UIControlEventTouchUpInside或类似。为什么不用按钮呢?你可以使它看起来完全像一个标签。

无论如何,你可能需要在你的cellForRowAtIndexPath:方法中的UIButton上设置addTarget:action:forControlEvents:和tag。在该方法中,通过检查标签值来检测哪个单元格的按钮被点击了。

如果你必须使用UILabel,那么你需要子类化它并拦截touchesBegan/touchesEnded方法(继承自UIResponder)来检测UIControlEventTouchUpInside。

OHAttributedLabel的问题。这个标签还处理点击链接。所以对于手柄点击标签上的任意点(不仅仅是链接)你必须

self.textLabel.onlyCatchTouchesOnLinks = NO;

自我的地方。textLabel是你的OHAttributedLabel。别忘了userInteractionEnabled

我不知道是不是同样的问题,但是…我添加了一个标签,无法让它识别触摸,我最终意识到这是因为我将它添加为子视图,但它的框架在父框架之外,因此触摸层次结构破裂

在设置表中使用静态表格单元格时遇到了问题,我希望整个单元格触发单元格文本字段的第一个响应器。

我最终添加了一个透明(自定义,空白标题)按钮后面的标签(触摸禁用)和文本字段后,没有得到任何触摸使用手势识别器。我认为它应该以一种更优雅的方式工作,但它解决了目前的任务和有限的目的。(你可以直接从按钮的默认动作中拖动connect)

有些丑陋。它只是描述了文本框后面对触摸做出反应的区域。这毕竟是我们的本意。所以也许它只是没有那么花哨。

将保留它,直到我找到识别器不开火的原因。

您可以使用TTTAttributedLabel来代替它。这很简单。当你初始化UITableViewCell时,你可以委派:TTTAttributedLabelDelegate如:

@interface MyTableViewCell : UITableViewCell<TTTAttributedLabelDelegate>{
    UILabel *nameLabel;
    TTTAttributedLabel *valueLabel;
}

初始化时,可以添加link到label:

 [valueLabel addLinkToPhoneNumber:valueStr withRange:NSMakeRange(0, valueStr.length)];

所以,你可以做任何你想做的:

- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithPhoneNumber:(NSString *)phoneNumber{
   //do anything you want.
}

最新更新