UITableView
。在其UIViewController
的cellForRowAtIndexPath
委托方法中,我实例化了包含多个自定义UILabels(实际上是OHAttributedLabel
的子类)作为内容视图的子视图的自定义UITableViewCell
对象。我尝试在标签上设置
userInteractionEnabled = YES
,然后在视图控制器中添加触摸事件,但这并没有起作用。有什么想法吗?
谢谢
UITableView
。在其UIViewController
的cellForRowAtIndexPath
委托方法中,我实例化了包含多个自定义UILabels(实际上是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];
OHAttributedLabel存在问题。该标签还可以处理链接的点击。因此,如果要处理标签上任意点(而不仅仅是链接)的点击,则必须
self.textLabel.onlyCatchTouchesOnLinks = NO;
其中self.textLabel是您的OHAttributedLabel。 不要忘记设置userInteractionEnabled。
UILabel不是UIControl,所以你不能在UIControlEventTouchUpInside或类似事件上获得它的事件。为什么不使用按钮呢?你可以使它看起来像一个标签。
无论如何,在你的cellForRowAtIndexPath:方法中,你可能需要设置addTarget:action:forControlEvents:和UIButton的tag。在该方法中,通过检查标记值来检测哪个单元格的按钮被点击。
如果你必须使用UILabel,则需要子类化它并拦截touchesBegan/touchesEnded方法(从UIResponder继承)以自己检测UIControlEventTouchUpInside事件。
你可以使用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.
}
我不知道是否是同样的问题,但是... 我添加了一个标签,但无法识别触摸,最终我意识到这是因为我将其添加为子视图,但其框架超出了其父视图的框架,因此触摸层次结构被破坏了。
我在使用静态表格单元格来创建设置表时遇到了一个问题,我希望整个单元格都可以触发单元格中的文本框的第一响应者。
最终,我在标签(触摸不可用)和文本字段后面添加了一个透明的(自定义的、空白标题)按钮,因为手势识别器无法获取任何触摸。我认为这应该可以以更优雅的方式解决,但现在它已经解决了任务和限定的目的。(你可以从按钮的默认动作直接拖拽连接)
有点丑陋。不过,它只是描述了文本框后面的区域对触摸的反应。这毕竟就是意图。所以也许它并不那么花哨。
在找到手势识别器无法触发的原因之前,我会一直保留它。