如何使 UILabel *not* 将触摸传递给它嵌入的 UITableViewCell?
Posted
技术标签:
【中文标题】如何使 UILabel *not* 将触摸传递给它嵌入的 UITableViewCell?【英文标题】:How do I make a UILabel *not* pass touches to the UITableViewCell it's embedded in? 【发布时间】:2014-12-21 18:38:42 【问题描述】:我有一个带有一堆单元格的UITableView
,我为每个单元格添加了一个UILabel
。我希望UILabel
在被点击时接受触摸,而不是单元格。显然,如果他们在标签之外点击并且仍然在单元格上是可以的,但如果它在标签上,则单元格不应该引起 segue 或动作或其他什么,只有标签的点击动作应该触发。
我造成这种情况的正常方法是将UIView
的userInteractionEnabled
设置为YES
,但在这种情况下,当我将它设置在标签上时,它不会导致任何不同的情况发生。当我在标签子类中观看touchesBegan
时,这些方法会触发,但单元格选择也会触发。
如何使UILabel
不将触摸传递到单元格?
【问题讨论】:
你的touchesBegan
方法在哪里(哪个类)?
在我的 UILabel 子类中。
你没有提到你有一个 UILabel
子类,这就是我问的原因。
完全明白。添加到主帖中。
touchesBegan 方法中有什么代码?
【参考方案1】:
我建议在标签中添加UITapGestureRecognizer
并将cancelsTouchesInView
属性设置为YES,以防止在手势识别时将触摸传递到视图,例如:
UITapGestureRecognizer *labelTapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:nil];
labelTapGesture.cancelsTouchesInView = YES;
[label addGestureRecognizer:labelTapGesture];
label.userInteractionEnabled = YES;
而且由于您不希望手势执行某项操作,您可以将其操作设置为 nil。
【讨论】:
是否需要手势识别器?我希望只使用内置的 touchesBegan 方法。 @DougSmith 是的,它需要一个手势识别器。我会更新以澄清。以上是关于如何使 UILabel *not* 将触摸传递给它嵌入的 UITableViewCell?的主要内容,如果未能解决你的问题,请参考以下文章
如何将触摸事件从 ScrollView 子视图传递到它的父视图
为啥嵌套视图中的 UILabel 不接收触摸事件/如何测试响应者链?
如何防止 UILabel 在 Swift 中阻止对父 UIButton 的触摸?