์๋ ํ์ธ์. UITextView ์ ํ์ดํผ๋งํฌ๋ก URL ์ ๋ํ๋ด๊ธฐ ์ํด ๋ฐฉ๋ฒ์ ์ฐพ์๋ณธ ๋ด์ฉ์ ์ ๋ฆฌํ๋ฌ ์์ต๋๋ค!
์ฒ์์๋ UILabel ์์ ์ ์ฉํ๋ ค๊ณ ํ๋๋ฐ ๋ฐฉ๋ฒ์ด ๋ณต์กํด์ UITextView ๋ก ๋ฐ๊ฟจ์ต๋๋ค.
- UILabel ์ ์ฌ์ฉํ๋ ค๋ฉด ํด๋น ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์.
๐ ๋ชฉ์ฐจ
1. TextView ์ dataDetectorTypes ์์ฑ ์ค์ ํ๊ธฐ
2. UITextViewDelegate ๋ฅผ ํตํด WKWebView ๋์์ฃผ๊ธฐ
์ด ๋๊ฐ์ง ๊ณผ์ ์ ํตํด TextView ์ ํ ์คํธ ์ค Http links ๋ฅผ ํด๋ฆญํด ์น๋ทฐ๋ฅผ ๋์์ค ์ ์์ต๋๋ค.
1. TextView ์ dataDetectorTypes ์์ฑ ์ค์ ํ๊ธฐ
UITextView ์๋ dataDetectorTypes ์์ฑ์ด ์์ด, phone numbers, http links ๋ฑ์ ์๋์ผ๋ก ์ธ์ํด URL ๋ก ๋ณํํด์ฃผ๊ณ ์ฑ์ ์คํํ ์ ์์ต๋๋ค. ํธ์ง์ด ๊ฐ๋ฅํ ๋ชจ๋( isEditable == true )์์๋ ์ฌ์ฉํ ์ ์์ด์.
๐ ๊ณต์ ๋ฌธ์ : UITextView - dataDetectorTypes
UITextView ์ ํธ์ง๊ณผ ์คํฌ๋กค์ด ๋ถ๊ฐ๋ฅํ๊ฒ ์ค์ ํ์ต๋๋ค. ์คํฌ๋กค์ด ๊ฐ๋ฅํ๊ฒ ์ค์ ๋์ด ์์ผ๋ฉด, ๋์ด๋ฅผ ๊ณ ์ ์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํด์!
dataDetectorTypes ๋ฅผ link ๋ก ์ค์ ํ๊ณ , text ์ http links ๋ฅผ ์์ฑํ๋ฉด ์๋์ผ๋ก ํ์ดํผ๋งํฌ๊ฐ ์ ์ฉ๋ฉ๋๋ค ๐ณ๐
class ViewController: UIViewController {
let textView = UITextView()
override func viewDidLoad() {
super.viewDidLoad()
setupLayout()
setupAttributes()
}
private func setupAttributes() {
textView.delegate = self
textView.isEditable = false
textView.isScrollEnabled = false
textView.dataDetectorTypes = .link
textView.text = "Take a look ๐ \n https://developer.apple.com/"
textView.textAlignment = .center
}
}
2. UITextViewDelegate ๋ฅผ ํตํด WKWebView ๋์์ฃผ๊ธฐ
UITextView ์ ์๋ ํ์ดํผ๋งํฌ๋ฅผ ๋๋ฅด๊ฒ ๋๋ฉด, dataDetectorTypes ์ค๋ช ์ ๋์์๋๋๋ก URL ์ ํธ๋ค๋งํ ์ฌํ๋ฆฌ ์ฑ์ ์ด์ด์ค๋๋ค.
์ฑ ๋ด์์ ์ด๋ํ ์ ์๋๋ก WebView ๋ฅผ ๋์์ฃผ๋ ค๋ฉด, delegate ๋ฅผ ์ฑํํด textView(_:shouldInteractWith:in:interaction:) ๋ฉ์๋๋ฅผ ๊ตฌํํด์ฃผ๋ฉด ๋ฉ๋๋ค ๐
๐ ๊ณต์๋ฌธ์ : UITextViewDelegate - textView(_:shouldInteractWith:in:interaction:)
ํด๋น ๋ฉ์๋์ ๋ฐํ๊ฐ์ด true ์ด๋ฉด ๊ธฐ๋ณธ ๋์์ผ๋ก ์ฌํ๋ฆฌ ์ฑ์ ์ด์ด์ฃผ๊ณ , false ์ด๋ฉด ๊ธฐ๋ณธ ๋์์ ํ์ง ์์ต๋๋ค.
๋ฉ์๋ ๋ด์์ WebViewController ๋ฅผ ์ง์ ์์ฑํ๊ณ , text ์์ ๋์ด์จ URL ์ ์ธ์๋ก ๋๊ฒจ ํ๋ฉด์ ๋์์ค๋๋ค.
extension ViewController: UITextViewDelegate {
func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool {
let webViewController = WebViewController(URL)
present(webViewController, animated: true, completion: nil)
return false
}
}
์ฐธ๊ณ ๋ก WebViewController ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ WKWebView ๋ฌธ์์ ๋์์์ต๋๋ค.
import UIKit
import WebKit
class WebViewController: UIViewController, WKUIDelegate {
var myURL: URL?
var webView: WKWebView!
init(_ url: URL?) {
super.init(nibName: nil, bundle: nil)
myURL = url
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
}
override func viewDidLoad() {
super.viewDidLoad()
guard let myURL = myURL else { return }
let myRequest = URLRequest(url: myURL)
webView.load(myRequest)
}
}
์ฝ๋๋ฅผ ์คํํ๋ฉด ์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ค ์ ์์ด์! (Autolayout ์ง์ ์ ํ์ ์ผํฉ๋๋ค..)
UITextView ์ WKWebView ๋ฅผ ์ด์ฉํด http links ๋ฅผ ํ์ดํผ๋งํฌ๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค! ๐โ๏ธ
์ฐธ๊ณ ๋งํฌ
[SWIFT] TextView์ ๋งํฌ ๊ฑธ๊ธฐ ๋ฐ ๋ทฐ ์ปจํธ๋กค๋ฌ ์ด๋
๐ https://g-y-e-o-m.tistory.com/158
SwiftRichString ์ ํตํด์๋ HTML ์ฒ๋ผ ์์ฑํด <a href> ํ๊ทธ๋ฅผ ๋ฃ์ ์ ์์ต๋๋ค.
* ์ฐพ์๋ดค๋ ๊ฒ์์ด? uilabel clickable link / swift hyperlink in label
'๐ iOS > UIKit' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] WKWebView - ์ฑ์์ ์น๋ทฐ๋ฅผ ๋์ฐ์ (0) | 2022.04.30 |
---|---|
[iOS] ๋ค์ด๋ฒ์ง๋ ์ฑ ์ฐ๋ - Place ID ๋ก ์ฑ ์ด๊ธฐ (2) | 2021.07.16 |
[iOS] FLO ์ฑ ๊ฐ๋ฐ ์ผ์ง #2. TableView ๋ก ๊ฐ์ฌ ํ๋ฉด ๊ฐ๋ฐํ๊ธฐ (0) | 2021.06.30 |
[iOS] FLO ์ฑ ๊ฐ๋ฐ ์ผ์ง #1. MVVM ํจํด๊ณผ Data Binding (0) | 2021.06.29 |
[iOS] MVC ํจํด (Model - View - Controller) (0) | 2021.06.18 |