티스토리 뷰

반응형

 

1. 아래 코드를 프로젝트에 추가해줍니다.

extension NSMutableAttributedString {

    public func setAsLink(textToFind:String, linkURL:String) -> Bool {
        
        // 하이퍼링크를 추가하고자 하는 text의 위치, 글자 수 를 찾는다.
        let foundRange = self.mutableString.range(of: textToFind)
        
        // text의 위치 존재 여부 확인
        if foundRange.location != NSNotFound {
           
           // 지정된 범위에 문자(링크)를 추가해준다. 
           self.addAttribute(.link, value: linkURL, range: foundRange)
           
           // 위치가 맞다면 true 반환
           return true
        }
        
        // 위치가 틀리면 false 반환
        return false
    }
    
}

 

 

 

 

2. textView의 텍스트를 NSMutableAttributedString에 복사해줍니다.

let linkedText = NSMutableAttributedString(attributedString: E47TextView.attributedText)

 

3. (1)에서 추가한 setAsLink 메서드를 사용해줍니다. 

성공하면 true를 리턴합니다.

true가 반납됐는지 확인하고 textView에 다시 복사를 해줍니다.

let hyperlinked = linkedText.setAsLink(textToFind: "magna aliqua", linkURL: "https://247ios.tistory.com/")

if hyperlinked { 
	E47TextView.attributedText = NSAttributedString(attributedString: linkedText) 
    }

 

 

 

결과물

 

 

[ 전체 코드 ]

import UIKit

class ViewController: UIViewController {

    let E47TextView = UITextView()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        self.view.addSubview(E47TextView)
        E47TextView.layer.borderWidth = 0.5
        E47TextView.frame = CGRect(x: 50, y: 100, width: 200, height: 200)
        E47TextView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
        
        let linkedText = NSMutableAttributedString(attributedString: E47TextView.attributedText)
        let hyperlinked = linkedText.setAsLink(textToFind: "magna aliqua", linkURL: "https://247ios.tistory.com/")
        
        if hyperlinked {
            E47TextView.attributedText = NSAttributedString(attributedString: linkedText)
        }
        
    }


}

extension NSMutableAttributedString {

    public func setAsLink(textToFind:String, linkURL:String) -> Bool {
        
        // 하이퍼링크를 추가하고자 하는 text의 위치, 글자 수 를 찾는다.
        let foundRange = self.mutableString.range(of: textToFind)
        
        // text의 위치 존재 여부 확인
        if foundRange.location != NSNotFound {
           
           // 지정된 범위에 문자(링크)를 추가해준다.
           self.addAttribute(.link, value: linkURL, range: foundRange)
           
           // 위치가 맞다면 true 반환
           return true
        }
        
        // 위치가 틀리면 false 반환
        return false
    }
    
}

 

 

[출처] https://jaymutzafi.com/how-to-hyperlink-part-of-a-text-in-a-uitextview-swift/

 

반응형

'iOS' 카테고리의 다른 글

Swizzling  (0) 2024.02.21
Override  (0) 2024.02.19
UIGraphics로 PDF 생성  (0) 2023.01.31
[SWIFT] WKWebView에서 Button Click  (0) 2020.03.03
[Xcode] Bitcode ERROR  (0) 2019.12.24