如何使 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 或动作或其他什么,只有标签的点击动作应该触发。

我造成这种情况的正常方法是将UIViewuserInteractionEnabled 设置为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 不接收触摸事件/如何测试响应者链?

如何防止 UILabel 在 Swift 中阻止对父 UIButton 的触摸?

如何在 Swift 中触摸 UILabel 时对其进行编辑?

如何使动态高度 UILabel 将其他元素推开?