我试图在 UITextView (不可编辑)中对特定单词进行点击 - 想象一下 Instagram 或 Twitter 移动应用程序中的主题标签或提及。
这篇文章帮助我了解了如何识别 UITextView 中特定单词的点击:
- (void)viewDidLoad
{
[super viewDidLoad];
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(printWordSelected:)];
[self.textView addGestureRecognizer:tap];
}
- (IBAction)printWordSelected:(id)sender
{
NSLog(@"Clicked");
CGPoint pos = [sender locationInView:self.textView];
NSLog(@"Tap Gesture Coordinates: %.2f %.2f", pos.x, pos.y);
//get location in text from textposition at point
UITextPosition *tapPos = [self.textView closestPositionToPoint:pos];
//fetch the word at this position (or nil, if not available)
UITextRange * wr = [self.textView.tokenizer rangeEnclosingPosition:tapPos
withGranularity:UITextGranularityWord
inDirection:UITextLayoutDirectionRight];
NSLog(@"WORD: %@", [self.textView textInRange:wr]);
}
不幸的是,这种方法不是防弹的,并且将在行尾的空白处的点击报告为对下一行开头的单词的点击。
显然,这是 UITextView 中自动换行的结果,有时会将单词移动到下一行的开头。
- 有没有办法解决它,而不是将这些点击在行尾报告为点击包装词?
- 是否有更好的方法来继续用户点击 UITextView 中的特定单词?