我的应用有自定义UITableView
。在其cellForRowAtIndexPath
的{{1}}委托方法中,我实例化包含多个自定义UILabel(实际上是UIViewController
的子类)的自定义UITableViewCell
对象作为内容视图的子视图
我尝试在标签上设置OHAttributedLabel
,然后在视图控制器中添加触摸事件,但这不起作用。
想法?
由于
答案 0 :(得分:13)
- (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];
答案 1 :(得分:1)
UILabel不是UIControl,因此您不会在UIControlEventTouchUpInside或类似事件上获取事件。为什么不使用按钮呢?你可以使它看起来像一个标签。
无论你是否需要在你的cellForRowAtIndexPath:方法中设置addTarget:action:forControlEvents:和标记在UIButton上。在该方法中,通过检查标记值来检测点击了哪个单元格的按钮。
如果必须使用UILabel,则需要对其进行子类化并拦截touchesBegan / touchesEnded方法(继承自UIResponder)以自行检测UIControlEventTouchUpInside。
答案 2 :(得分:1)
OHAttributedLabel中的问题。此标签还可以处理链接。因此,对于手柄点击任何标签点(不仅仅是链接),您必须
self.textLabel.onlyCatchTouchesOnLinks = NO;
其中self.textLabel是您的OHAttributedLabel。 并且不要忘记userInteractionEnabled。
答案 3 :(得分:0)
我不知道它是否是同一个问题但是......我添加了一个标签并且无法识别触摸,我终于意识到这是因为我将它添加为子视图,但它的框架超出了它的父母的框架,因此触摸heirarchy打破了
答案 4 :(得分:0)
我刚才遇到了将静态表格单元格用于设置表的问题,我希望整个单元格触发单元格文本字段的第一个响应者。
我最后在没有使用手势识别器进行任何触摸后,在标签后面添加了透明(自定义,空白标题)按钮(触摸已禁用)和文本字段。我认为它应该以更优雅的方式工作,但它解决了现在的任务和有限的目的。 (您只需从按钮的默认操作拖动连接)
有点难看。然后,它再次描述了文本字段背后触摸的区域。毕竟这是意图。也许它只是不那么花哨。将保留它,直到我找到识别器未触发的原因。
答案 5 :(得分:0)
您可以使用TTTAttributedLabel
代替它。这很容易。
初始化UITableViewCell时,您可以委派:TTTAttributedLabelDelegate
喜欢:
@interface MyTableViewCell : UITableViewCell<TTTAttributedLabelDelegate>{
UILabel *nameLabel;
TTTAttributedLabel *valueLabel;
}
初始时,您可以添加标签链接:
[valueLabel addLinkToPhoneNumber:valueStr withRange:NSMakeRange(0, valueStr.length)];
所以,你可以做任何你想做的事情:
- (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithPhoneNumber:(NSString *)phoneNumber{
//do anything you want.
}