我有一个UITextView
,其中某些单词被下划线替换,以填补空白效果。我在检测这些“空白”上的水龙头时遇到了困难。我到目前为止所尝试的是使用rangeEnclosingPosition
获取单词的范围,并将粒度设置为Word,但看起来它不能识别特殊字符上的点击。现在,我希望给我的'下划线'字符串自定义属性,这样我就可以查看被点击的单词是否有任何自定义属性集。任何想法都会非常有用。
答案 0 :(得分:0)
您可以尝试使用 UITextViewDelegate 方法 - textViewDidChangeSelection ,当文本视图中插入符号的位置发生变化时会收到通知,如果插入符号当前位置的下一个字符是您的特殊字符,则会在此处显示逻辑。
答案 1 :(得分:0)
我是这样做的 -
将自定义属性添加到文本中的特殊字符。在我的情况下,我知道特殊字符将是所有下划线或那只是我正在寻找的。所以我以下面的方式添加了一个自定义属性 -
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:underscoreString attributes:@{ @"yourCustomAttribute" : @"value", NSFontAttributeName : [ UIFont boldSystemFontOfSize:22.0] }];
要查找特殊字符的点按,请按以下方式添加UITapGestureRecognizer
-
UITapGestureRecognizer *textViewTapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedTextView:)];
textViewTapRecognizer.delegate = self;
[self.textView addGestureRecognizer:textViewTapRecognizer];
并按以下方式定义其选择器 -
-(void) tappedTextView:(UITapGestureRecognizer *)recognizer
{
UITextView *textView = (UITextView *)recognizer.view;
// Location of the tap in text-container coordinates
NSLayoutManager *layoutManager = textView.layoutManager;
CGPoint location = [recognizer locationInView:textView];
location.x -= textView.textContainerInset.left;
location.y -= textView.textContainerInset.top;
// Find the character that's been tapped on
NSUInteger characterIndex;
characterIndex = [layoutManager characterIndexForPoint:location
inTextContainer:textView.textContainer
fractionOfDistanceBetweenInsertionPoints:NULL];
NSString *value;
if (characterIndex < textView.textStorage.length) {
NSRange range;
value = [[textView.attributedText attribute:@"yourCustomAttribute" atIndex:characterIndex effectiveRange:&range] intValue];
NSLog(@"%@, %lu, %lu", value, (unsigned long)range.location, (unsigned long)range.length);
}
}
如果您获得了某个值,则会点按您的特殊字符。可能有更好的方法来做到这一点,但这对我现在有用。