[iOS] ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTMLํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ

2021. 8. 28. 18:02ยท๐ŸŽ iOS & Swift

UILabel ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTML ํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ

 

์—ด์‹ฌํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ UI์— ๋ฟŒ๋ ค์ฃผ๋Š” ์ž‘์—… ์ค‘ ๋„์ €ํžˆ ๊ฐ€๋งŒํžˆ ์žˆ์„ ์ˆ˜ ์—†๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๊ฐ’ ์•ˆ์— html ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ผ๋ฒจ์— ๊ทธ๋Œ€๋กœ ํ‘œํ˜„๋˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์ ์šฉ์ด ๋˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง€๊ธธ ์›ํ–ˆ๋Š”๋ฐ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉํ–ฅ ์ชฝ์œผ๋กœ ๊ฐ€๊ธฐ๋กœ ํ–ˆ์–ด์š”. ์ข‹์€ ์ต์Šคํ…์…˜์ด ์žˆ์–ด์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ด๋ดค๋Š”๋ฐ ๊น”๋”ํ•˜๊ฒŒ ์ ์šฉ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ…์…˜์„ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„๋„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์€ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~! ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :)

 

 

์™ผ์ชฝ์„ ๋ณด๋ฉด ์•„์ฃผ ๋ถˆํŽธ... ์ ์šฉํ•˜๊ณ  ๋‚˜๋‹ˆ ๋งˆ์Œ์ด ํŽธํ•ด์ง€๋„ค์š” ใ…Žใ…Ž

 

 

// ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTMLํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ (์ต์Šคํ…์…˜)

extension String {
    // html ํƒœ๊ทธ ์ œ๊ฑฐ + html entity๋“ค ๋””์ฝ”๋”ฉ.
    var htmlEscaped: String {
        guard let encodedData = self.data(using: .utf8) else {
            return self
        }
        
        let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [
            .documentType: NSAttributedString.DocumentType.html,
            .characterEncoding: String.Encoding.utf8.rawValue
        ]
        
        do {
            let attributed = try NSAttributedString(data: encodedData,
                                                    options: options,
                                                    documentAttributes: nil)
            return attributed.string
        } catch {
            return self
        }
    }
}
// ์‚ฌ์šฉ๋ฒ•

public func configureCell(imageURL: String, title: String, director: String, actor: String, pubDate: String) {
    ...
    // ๋‹ค์Œ๊ณผ ๊ฐ™์ด String ๊ฐ’ ๋’ค์— .htmlEscaped๋ฅผ ๋ถ™์—ฌ์„œ ์‚ฌ์šฉ
    titleLabel.text = title.htmlEscaped
    ...
}

 

 

์ฐธ๊ณ  ๋ ˆํผ๋Ÿฐ์Šค ์ถœ์ฒ˜

[UILabel-HTML] UILabel์— HTML load ํ•˜๊ธฐ ๋˜๋Š” HTML ์ฝ”๋“œ๋ฅผ ๋บ€ ํ…์ŠคํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ

'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[iOS] Associated Type  (3) 2021.09.05
[iOS] Typealias, ํƒ€์ž… ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ  (3) 2021.09.02
[iOS] Convenience init(ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €)  (2) 2021.08.22
[iOS] frame๊ณผ bounds  (0) 2021.08.20
[iOS] ์˜ต์…”๋„, Optional  (0) 2021.08.18
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [iOS] Associated Type
  • [iOS] Typealias, ํƒ€์ž… ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ
  • [iOS] Convenience init(ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €)
  • [iOS] frame๊ณผ bounds
taeeekki
taeeekki
๐ŸŒฑiOS ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ํ•™์ƒ์ด ๋งŒ๋“œ๋Š” ๋ธ”๋กœ๊ทธ
taeeekki
taekki.dev
taeeekki
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • All (130)
    • ๐ŸŒฑ SeSAC (40)
    • โ˜€๏ธ 100DaysOfSwift (18)
    • ๐ŸŽ iOS & Swift (60)
    • ๐Ÿ“ฉ Essay (3)
    • ๐ŸŽ Tip (4)
    • ๐ŸŒˆ UIUX (2)
    • ๐Ÿง OOP (1)
    • ๐Ÿฅณ Side Project (0)
    • โœจ Problem Solving (1)
    • ๐Ÿ“ Note (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

์Šค์œ„ํ”„ํŠธ ๋ฌธ๋ฒ•
TIL
github
IOS
Diary App
swift
์˜ต์…”๋„
tableView
URLSession
๊ฐœ๋ฐœ
iOS UIUX
network
Realm
๊นƒํ—ˆ๋ธŒ
iOS H.I.G
์†ํŠธ
commit
์Šค์œ„ํ”„ํŠธ๋ฌธ๋ฒ•
์˜ค์˜คํˆฌ๋‘
github tip
์Šค์œ„ํ”„ํŠธ
๊ฐœ์ธ ์•ฑ ์ถœ์‹œ
OOTD
SeSAC
GIT
100DaysOfSwift
ํด๋กœ์ €
PageViewController
CollectionView
iOS ์•ฑ ์ถœ์‹œ

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLOยท Designed By์ •์ƒ์šฐ.v4.5.3
taeeekki
[iOS] ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTMLํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.