您的位置:首页 > 移动开发 > IOS开发

iOS7 textView处理URL链接 以及点击 长按手势的处理

2015-10-10 16:59 537 查看

举例1 :文本超链接

@property (weak,
nonatomic) IBOutlet
UITextView *tv;

NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"This
is an example by @marcelofabri_"];
[attributedString addAttribute:NSLinkAttributeName
value:@"username://marcelofabri_"
range:[[attributedString string] rangeOfString:@"@marcelofabri_"]];

NSDictionary *linkAttributes = @{NSForegroundColorAttributeName: [UIColor greenColor],
NSUnderlineColorAttributeName: [UIColor lightGrayColor],
NSUnderlineStyleAttributeName: @(NSUnderlinePatternSolid)};
self.tv.linkTextAttributes = linkAttributes;
self.tv.attributedText = attributedString;
self.tv.delegate =self ;
self.tv.editable = NO;

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL
inRange:(NSRange)characterRange{

NSLog(@"%@",URL.absoluteString);

return NO ;
}

举例2 :文本:系统默认是双击 ,这里用单击实现

self.tv.dataDetectorTypes = UIDataDetectorTypeAll;

self.tv.attributedText =
[[NSAttributedString alloc]initWithString:
@" +8602980000000.\r\n"

"My personal web site www.xxxxxx.com.\r\n"

"My E-mail address is XXXXX@gmail.com.\r\n"
"I was born in 1900-01-01."];

self.tv.editable = NO;

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onlyTap:)];

[self.tv addGestureRecognizer:tap];

- (void)onlyTap:(UITapGestureRecognizer *)recognizer
{
CGPoint location = [recognizer locationInView:self.tv];

NSLog(@"Tap Gesture Coordinates: %.2f %.2f", location.x,
location.y);
NSString *tappedSentence = [self lineAtPosition:CGPointMake(location.x,
location.y)];
NSLog(@"%@",tappedSentence);

}

- (NSString *)lineAtPosition:(CGPoint)position
{

//eliminate scroll offset
position.y += _tv.contentOffset.y;

//get location in text from textposition at point
UITextPosition *tapPosition = [_tv closestPositionToPoint:position];

//fetch the word at this position (or nil, if not available)

UITextRange *textRange = [_tv.tokenizer rangeEnclosingPosition:tapPosition withGranularity:UITextGranularitySentence inDirection:UITextLayoutDirectionRight];
return [_tv textInRange:textRange];
}

参考资料:
http://stackoverflow.com/questions/15034652/tap-gesture-to-part-of-a-uitextview http://www.raywenderlich.com/48001/easily-overlooked-new-features-ios-7#textViewLinks
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: