iOS - 富文本指定文字點擊實現(仿超鏈接)

就這種。

#import "ViewController.h"

@interface ViewController () <UITextViewDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    NSString *str1 = @"大美女";

    NSString *str2 = @"愛上了英俊的";

    NSString *str3 = @"xtayqria";

    NSString *str = [NSString stringWithFormat:@"%@%@%@",str1,str2,str3];

    

    NSRange range1 = [str rangeOfString:str1];

    NSRange range2 = [str rangeOfString:str2];

    NSRange range3 = [str rangeOfString:str3];

    

    UITextView *textView = [[UITextView alloc] init];

    textView.frame = CGRectMake(40, 100, 300, 50);

    textView.editable = NO;

    textView.delegate = self;

    [self.view addSubview:textView];

    

    NSMutableAttributedString *mastring = [[NSMutableAttributedString alloc] initWithString:str attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:22.0f]}];

    [mastring addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range1];

    [mastring addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:range2];

    [mastring addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:range3];

    // 1.必須要用前綴(firstPerson,secondPerson),隨便寫但是要有

    // 2.要有後面的方法,如果含有中文,url會無效,所以轉碼

    NSString *valueString1 = [[NSString stringWithFormat:@"firstPerson://%@",str1] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];

    NSString *valueString3 = [[NSString stringWithFormat:@"secondPerson://%@",str3] stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]];

    

    [mastring addAttribute:NSLinkAttributeName value:valueString1 range:range1];

    [mastring addAttribute:NSLinkAttributeName value:valueString3 range:range3];

    

    textView.attributedText = mastring;

}

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

    if ([[URL scheme] isEqualToString:@"firstPerson"]) {

        NSString *titleString = [NSString stringWithFormat:@"你點擊了第一個文字:%@",[URL host]];

        [self clickLinkTitle:titleString];

        return NO;

    } else if ([[URL scheme] isEqualToString:@"secondPerson"]) {

        NSString *titleString = [NSString stringWithFormat:@"你點擊了第二個文字:%@",[URL host]];

        [self clickLinkTitle:titleString];

        return NO;

    }

    return YES;

}

- (void)clickLinkTitle:(NSString *)title {

    UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:title preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction *action = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleCancel handler:nil];

    [alert addAction:action];

    [self presentViewController:alert animated:YES completion:nil];

}

// ---------------圖片--------------------//

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章