将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell
Posted
技术标签:
【中文标题】将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell【英文标题】:Passing a UITapGestureRecognizer touch onto an underlying UITableViewCell 【发布时间】:2014-01-24 21:53:58 【问题描述】:我有一个包含 UITextView 的 UITableViewCell。我希望 UITextView 中的某些字符可以点击 - 我正在使用 TextKit 来实现。我在我的 UITextView 上设置了一个 UITapGestureRecognizer,但我正在使用它来确定我的文本容器中的哪些字形已被选中。
我遇到的问题是,如果点击了不相关的字形,我想将点击传递到底层 UITableViewCell 上。实现这一目标的最佳方法是什么?
NSLayoutManager *layoutManager = textView.layoutManager;
CGPoint location = [recognizer locationInView:textView];
location.x -= textView.textContainerInset.left;
location.y -= textView.textContainerInset.top;
NSUInteger characterIndex;
characterIndex = [layoutManager characterIndexForPoint:location
inTextContainer:textView.textContainer
fractionOfDistanceBetweenInsertionPoints:NULL];
if (characterIndex < textView.textStorage.length)
NSRange range;
id value = [textView.attributedText attribute:@"applicableCharacters" atIndex:characterIndex effectiveRange:&range];
if(value)
// Handle this tap, don't pass to the UITableViewCell
else
// Don't handle this tap, let the UITableView call tableView:didSelectRowAtIndexPath:
【问题讨论】:
如何为您的子类单元格提供一个包含其 indexPath 的公共属性。然后在单元格上有一个委托协议,当数据源接收到委托调用时,它可以简单地执行[self didSelectRowAtIndexPath:receivedCell.indexPath
【参考方案1】:
根据我自己的评论,但没有必要跳过委托部分。
单元子类的公共属性:
@property (nonatomic, strong) NSIndexPath *indexPath;
在为 indexPath 返回单元格时从数据源中设置此项...
在你的 else 中:
UITableView *tableView = (UITableView *) self.superview;
[tableView.delegate didSelectRowAtIndexPath:self.indexPath];
【讨论】:
以上是关于将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
将 NSDictionary 作为参数传递给 UITapGestureRecognizer
将 UITapGestureRecognizer 添加到 UIControl
将 UITapGestureRecognizer 连接到 UIView
将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell