我的应用程序有一个自定义的UITableView
。在UIViewController
的cellForRowAtIndexPath
委托方法中,我实例化了包含多个自定义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.
}