2016-08-30 22 views
12

Với một UITextView không thể chỉnh sửa, tôi muốn để nhúng văn bản như thế này trong iOS9 +:UITextView với siêu liên kết văn bản

Chỉ click here đăng ký

tôi có thể tạo ra một chức năng và thao tác văn bản nhưng có cách nào đơn giản hơn không?

tôi thấy rằng tôi có thể sử dụng NSTextCheckingTypeLink để nhận được nhấp được văn bản mà không có sự 'nhấp vào đây' phần là đơn giản trong giao diện Builder:

Chỉ http://example.com đăng ký

Tôi đang sử dụng Xcode 8 và Swift 3 nếu có liên quan.

Trả lời

17

Đặt điều khiển xem của bạn để phù hợp với UITextViewDelegate và một đoạn mã sau:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // You must set the formatting of the link manually 
    let linkAttributes = [ 
     NSLinkAttributeName: NSURL(string: "https://www.apple.com")!, 
     NSForegroundColorAttributeName: UIColor.blue 
    ] as [String : Any] 

    let attributedString = NSMutableAttributedString(string: "Just click here to register") 

    // Set the 'click here' substring to be the link 
    attributedString.setAttributes(linkAttributes, range: NSMakeRange(5, 10)) 

    self.textView.delegate = self 
    self.textView.attributedText = attributedString 
} 

func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { 
    return true 
} 
+0

UITextItemInteraction is iOS10 + nhưng tôi cần iOS9 +. Tôi sẽ xem liệu tôi có thể sửa chữa và bỏ phiếu cho điều này trong một giây không. –

+1

Trong nhanh chóng 4, các thuộc tính đã được đổi tên từ NSLinkAttributedName thành .link và NSForegroundColorAttributeName thành .foregroundColor –

0

tôi muốn làm điều tương tự và kết thúc chỉ sử dụng một UIButton với tiêu đề "bấm vào đây" bao quanh bởi UILabels " chỉ cần "và" đăng ký ", sau đó:

@IBAction func btnJustClickHereLink(_ sender: UIButton) { 
    if let url = URL(string: "http://example.com") { 
     UIApplication.shared.openURL(url) 
    } 
} 
Các vấn đề liên quan