티스토리 뷰
반응형
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 |
- Total
- Today
- Yesterday
공지사항
TAG
- swiftpdf
- UIGraphics
- 리팩터링
- wkwebview
- SWIFT JQuery
- SWIFT WebView
- dfs
- 플로팅팝업
- 스위즐링
- pdfkit
- 이펙티브 엔지니어
- ReactNative
- 객체지향의 사실과 오해
- ios
- Swift
- UIGraphicsBeginPDFPageWithInfo
- 알고리즘
- riverpod
- 클린 아키텍처
- 로버트C마틴
- Flutter
- SWIFT 자바스크립트연동
- NSMutableAttributedString
- OOP
- mutableString
- NSNotFound
- llvm
- 에드먼드 라우
- UIGraphicsBeginPDFContextToData
- SWIFT JavaScript