入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

NSString 中提取url 并打开

创建时间:2016-07-05 投稿人: 浏览次数:784



NSString * const KILabelLinkTypeKey = @"linkType";

NSString * const KILabelRangeKey = @"range";

NSString * const KILabelLinkKey = @"link";


typedef NS_ENUM(NSUInteger, KILinkType)

{

    KILinkTypeUserHandle,

    KILinkTypeHashtag,

    KILinkTypeURL,

}



- (NSArray *)getRangesForURLs:(NSAttributedString *)text

{

    NSMutableArray *rangesForURLs = [[NSMutableArray alloc] init];;

    

    // Use a data detector to find urls in the text

    NSError *error = nil;

    NSDataDetector *detector = [[NSDataDetector alloc] initWithTypes:NSTextCheckingTypeLink error:&error];

    

    NSString *plainText = text.string;

    

    NSArray *matches = [detector matchesInString:plainText

                                         options:0

                                           range:NSMakeRange(0, text.length)];

    

    // Add a range entry for every url we found

    for (NSTextCheckingResult *match in matches)

    {

        NSRange matchRange = [match range];

        

        // If there"s a link embedded in the attributes, use that instead of the raw text

        NSString *realURL = [text attribute:NSLinkAttributeName atIndex:matchRange.location effectiveRange:nil];

        if (realURL == nil)

            realURL = [plainText substringWithRange:matchRange];

 

            if ([match resultType] == NSTextCheckingTypeLink)

            {

                [rangesForURLs addObject:@{KILabelLinkTypeKey : @(KILinkTypeURL),

                                           KILabelRangeKey : [NSValue valueWithRange:matchRange],

                                           KILabelLinkKey : realURL,

                                           }];

            }

        }

    

    return rangesForURLs;

}



#pragma mark - Interactions


- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

  [super touchesBegan:touches withEvent:event];

}


- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

{

    [super touchesMoved:touches withEvent:event];

}


- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

{

    [super touchesEnded:touches withEvent:event];

    

    if (self.linkRanges.count > 0) {

       NSDictionary * tmpdic = self.linkRanges[0];

       NSString * url = tmpdic[@"link"];

        LOGD(@"***********************  url : %@",url);

        if (url.length > 0) {

            [self attemptOpenURL:[NSURL URLWithString:url]];

        }

    }

}


- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event

{

    [super touchesCancelled:touches withEvent:event];

    

}



- (void)attemptOpenURL:(NSURL *)url

{

    BOOL safariCompatible = [url.scheme isEqualToString:@"http"] || [url.scheme isEqualToString:@"https"];

    

    if (safariCompatible && [[UIApplication sharedApplication] canOpenURL:url])

    {

        [[UIApplication sharedApplication] openURL:url];

    }

    else

    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Problem"

                                                        message:@"The selected link cannot be opened."

                                                       delegate:nil

                                              cancelButtonTitle:@"Dismiss"

                                              otherButtonTitles:nil];

        [alert show];

    }

}


声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。