码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 文本自由复制 超链接监听

时间:2017-10-19 17:40:56      阅读:384      评论:0      收藏:0      [点我收藏+]

标签:types   超链接   test   ipa   cto   sel   tac   代理   handle   

 

对于 Label 需要支持复制、超链接监听最好的方案就是使用UITextView 代替Label 

设置TextView支持超链接

self.contentTextView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0);
self.contentTextView.delegate = self;
self.contentTextView.editable = NO;
self.contentTextView.showsVerticalScrollIndicator = NO;
self.contentTextView.dataDetectorTypes = UIDataDetectorTypeLink; 

  

TextView  默认超链接点击 是应用外跳转
要想实现应用内跳转,需要遵循 UITextViewDelegate 实现UITextViewDelegate代理方法,拦截到超链接URL 自己在应用内做跳转 
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    if ([self.delegate respondsToSelector:@selector(clickUrl:)]) {
        [self.delegate clickUrl:[URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    }
    NSLog(@"%@", URL.absoluteString);
    return NO;  
}

  

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange  
 
return YES 除了监听点击事件之外还是监听长按事件 长按弹出copy share 按钮 ,不过点击open 会跳转到应用外打开链接,
return NO  只监听链接的点击事件  不监听其他事件  例如长按弹出copy share 按钮 , 这样我们可以自定义 弹出按钮 ,然后做copy 和 应用内打开链接等操作
 
- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange {
    if ([self.delegate respondsToSelector:@selector(clickUrl:)]) {
        [self.delegate clickUrl:[URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    }
    return NO;
}

  

控制器里面 实现代理

- (void)clickUrl:(NSString *)url {
    UIAlertControllerStyle style = UIAlertControllerStyleActionSheet;
    if ([PhoneUtil isPadDevice]) {    // 适配iPad 
        style = UIAlertControllerStyleAlert;
    }
    UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:url message:nil preferredStyle:style];
    // 处理复制
    UIAlertAction *copyAction = [UIAlertAction actionWithTitle:getStringByKey(@"string_key_616") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
        pasteboard.string = url;
    }];
    // 处理链接点击应用内跳转
    UIAlertAction *openAction = [UIAlertAction actionWithTitle:getStringByKey(@"string_key_1370") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        UIStoryboard *sb=[UIStoryboard storyboardWithName:@"Setting" bundle:[NSBundle mainBundle]];
        WebViewVC *vc=[sb instantiateViewControllerWithIdentifier:@"WebViewVC"];
        vc.url = url;
        [self.navigationController pushViewController:vc animated:YES];
    }];
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:getStringByKey(@"string_key_219") style:UIAlertActionStyleCancel handler:nil];
    
    [alertVC addAction:copyAction];
    [alertVC addAction:openAction];
    [alertVC addAction:cancelAction];

    [self.navigationController presentViewController:alertVC animated:YES completion:nil];
}

  

 

iOS 文本自由复制 超链接监听

标签:types   超链接   test   ipa   cto   sel   tac   代理   handle   

原文地址:http://www.cnblogs.com/10-19-92/p/7693592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!