Thay đổi màu của liên kết trong NSMutableAttributedString


78

Tôi có mã sau nhưng liên kết của tôi luôn có màu xanh lam. Làm cách nào để thay đổi màu của chúng?

[_string addAttribute:NSLinkAttributeName value:tag range:NSMakeRange(position, length)];
[_string addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:(12.0)] range:NSMakeRange(position, length)];
[_string addAttribute:NSStrokeColorAttributeName value:[UIColor greenColor] range:NSMakeRange(position, length)];

_string là một NSMutableAttributedString và vị trí và độ dài hoạt động tốt.


1
Tôi đã sử dụng cái này: stackoverflow.com/questions/25457131/…
cdub

Nếu bạn cảm thấy câu hỏi đã được người dùng trả lời thỏa đáng, vui lòng chọn nó làm câu trả lời được chấp nhận.
Will Von Ullrich

Câu trả lời:


185

Nhanh

Đã cập nhật cho Swift 4.2

Sử dụng linkTextAttributesvới mộtUITextView

textView.linkTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.green]

Và trong ngữ cảnh:

let attributedString = NSMutableAttributedString(string: "The site is www.google.com.")
let linkRange = (attributedString.string as NSString).range(of: "www.google.com")
attributedString.addAttribute(NSAttributedString.Key.link, value: "https://www.google.com", range: linkRange)
let linkAttributes: [NSAttributedString.Key : Any] = [
    NSAttributedString.Key.foregroundColor: UIColor.green,
    NSAttributedString.Key.underlineColor: UIColor.lightGray,
    NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue
]

// textView is a UITextView
textView.linkTextAttributes = linkAttributes
textView.attributedText = attributedString

Objective-C

Sử dụng linkTextAttributesvới mộtUITextView

textView.linkTextAttributes = @{NSForegroundColorAttributeName:[UIColor greenColor]};

Nguồn: câu trả lời này

Và từ bài đăng này :

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: @(NSUnderlineStyleSingle)};

// assume that textView is a UITextView previously created (either by code or Interface Builder)
textView.linkTextAttributes = linkAttributes; // customizes the appearance of links
textView.attributedText = attributedString;
textView.delegate = self;

Tôi đã có thể thay đổi màu liên kết, nhưng làm cách nào Tôi có thể thay đổi màu xuất hiện khi bạn tiếp tục nhấn liên kết?
Mago Nicolas Palacios

46

Màu liên kết là màu của nhãn / textView. Vì vậy, bạn có thể thay đổi nó bằng cách thay đổi màu sắc của chế độ xem. Tuy nhiên, điều này sẽ không hoạt động nếu bạn muốn các màu liên kết khác nhau trong cùng một chế độ xem.


Làm việc cho tôi trên iOS 12.
Iris Veriris

Hoạt động độc đáo cho UITextView
DeepBlue

9
Không hoạt động trong Xcode 11.2.1, Swift 5 cho UILabel @crcalin
ios

8

Nhanh

 let str = "By using this app you agree to our Terms and Conditions and Privacy Policy"
 let attributedString = NSMutableAttributedString(string: str)
 var foundRange = attributedString.mutableString.rangeOfString("Terms and Conditions")

 attributedString.addAttribute(NSLinkAttributeName, value: termsAndConditionsURL, range: foundRange)
 foundRange = attributedString.mutableString.rangeOfString("Privacy Policy")
 attributedString.addAttribute(NSLinkAttributeName, value: privacyURL, range: foundRange)
 policyAndTermsTextView.attributedText = attributedString
 policyAndTermsTextView.linkTextAttributes = [NSForegroundColorAttributeName : UIColor.blueColor()]

1
 NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:@"here" attributes:@{ @"myCustomTag" : @(YES), NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15], NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle) }];

Objective-C

Điều này sẽ làm cho văn bản có gạch chân màu trắng có thể nhấp được. Chọn các thuộc tính cần thiết cho mã của bạn và sử dụng nó.

Để có chuỗi với liên kết có thể nhấp trong đó, hãy làm tiếp theo:

NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Click " attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15]}];
NSAttributedString* attributedString = [[NSAttributedString alloc] initWithString:@"here" attributes:@{ @"myCustomTag" : @(YES), NSForegroundColorAttributeName:[UIColor whiteColor], NSFontAttributeName:[UIFont fontWithName:@"SourceSansPro-Semibold" size:15], NSUnderlineStyleAttributeName : @(NSUnderlineStyleSingle) }];
[string appendAttributedString:attributedString];

Kết quả là bạn sẽ nhận được chuỗi "Bấm vào đây" và "đây" sẽ là một liên kết. Bạn có thể đặt các kiểu khác nhau cho từng chuỗi.


1

Đối với swift3.0

  override func viewDidLoad() {
     super.viewDidLoad()

  let linkAttributes = [
        NSLinkAttributeName: NSURL(string: "http://stalwartitsolution.co.in/luminutri_flow/terms-condition")!
        ] as [String : Any]
  let attributedString = NSMutableAttributedString(string: "Please tick box to confirm you agree to our Terms & Conditions, Privacy Policy, Disclaimer. ")

  attributedString.setAttributes(linkAttributes, range: NSMakeRange(44, 18))

  attributedString.addAttribute(NSUnderlineStyleAttributeName, value: NSNumber(value: 1), range: NSMakeRange(44, 18))

  textview.delegate = self
  textview.attributedText = attributedString
  textview.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.red]
  textview.textColor = UIColor.white
  }


  func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
    return true
   }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.