SwiftUI
์์ ์ฌ๋ฌ ์ค์ ํ
์คํธ ์
๋ ฅ์ ๋ฐ๊ธฐ ์ํด์ ๋ฌด์์ ์ฌ์ฉํด์ผ ํ ๊น์?
iOS 14.0+ ๋ถํฐ ์ ๊ณต๋๋ TextEditor๊ฐ ์์ง๋ง, ๊ธฐ๋ฅ์ด ์ ํ์ ์ ๋๋ค.
์คํฌ๋กค ๊ธฐ๋ฅ์ ์ผ๊ณ ๋๊ฑฐ๋, firstResponder ์ค์ , ๋ค์ด๋๋ฏน height ์กฐ์ , ๋ฐฑ๊ทธ๋ผ์ด๋ ์ปฌ๋ฌ ๋ณ๊ฒฝ ๋ฑ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, TextEditor ๋ก๋ ์ค๋ฌด์์ ํ์ํ ๋ณต์กํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑ์ํค๊ธฐ ์ด๋ ต์ต๋๋ค.
TextMaster
๋ UIKit ์์ iOS 2.0+ ๋ถํฐ ์ ๊ณต๋๋ ๊ทผ๋ณธ API ์ธ UITextView์ ๊ธฐ๋ฅ์
SwiftUI
์์ ์ฌ์ฉํ ์ ์๋๋ก wrapping ํ ๊ตฌ์กฐ์ฒด์
๋๋ค.
TextMaster
๋ iOS 15.0+
๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
์ผ๋ถ๋ฌ SPM ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ง๋ค์ง ์์์ต๋๋ค.
๋ณธ ๋ ํฌ์ TextMaster.swift ํ์ผ ๋ด๋ถ๋ฅผ ๋ณต์ฌํด์ ๊ฐ์ ธ๊ฐ๋ฉด, ๋ฐ๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ปค์คํ ์ด ํ์ํ ๋ถ๋ถ์ ์ค์ค๋ก ์์ ํด์ ์ฌ์ฉํ์ ๋ ๋ฉ๋๋ค. ๐
์ค๋ฌด์์ ๊ธฐํ์/๋์์ด๋์ ํ๋ฉด์ ์ฌ๋ฆฌ๋ TextView ์ ์คํ์ ์ด์ผ๊ธฐํ๋ค ๋ณด๋ฉด, ๋จ์ํ ๊ณ ์ height ๋ก ๊ฒฐ์ ๋ ๋๋ ์์ง๋ง
๊ฐํน, ์ด๋ฐ ์คํ์ ์ ๋ฌ ๋ฐ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
"์ฒ์์ 1์ค๋ง ํ์๋๋ค๊ฐ, ์ต๋ 5์ค๊น์ง ๋์ด๋๊ณ , ๊ทธ ๋ณด๋ค ๋ง์์ง๋ฉด ์คํฌ๋กค์ด ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด์ฃผ์ธ์."
"์ ๊ทผ๋ฐ ํฐํธ๋ 24 ์ ๋๋ก ์ข ํฌ๊ฒ ํด์ฃผ์๊ณ ์."
"์ฒ์์ ์ด ํ์ด์ง๋ก ์ง์ ํ ๋, ๋ฐ๋ก TextView ์ ํฌ์ปค์ค๊ฐ ๋ค์ด์ค๋ฉด์ ํค๋ณด๋๊ฐ ์ฌ๋ผ์ค๊ฒ ํด์ฃผ์ธ์."
์ถฉ๋ถํ ํฉ๋ฆฌ์ ์ธ ์คํ์ด์ง๋ง, ์ด ์คํ์ SwiftUI ์์ ๊ตฌํํ๋ ๊ฑด ๋งค์ฐ~ ๊น๋ค๋กญ์ต๋๋ค.
ํ์ง๋ง TextMaster
๋ก๋ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค.
TextMaster(
text: $text, // @State ํ
์คํธ์ ๋ฐ์ธ๋ฉ
isFocused: $isTextMasterFocused, // @FocusState ์ ๋ฐ์ธ๋ฉ
minLine: 1, // ์ต์ 1์ค (๋ํดํธ)
maxLine: 5, // ์ต๋ 5์ค (๋ผ์ธ์ด ๋ ๋์ด๋๋ฉด ์คํฌ๋กค ๊ธฐ๋ฅ์ด ์๋)
fontSize: 24, // ํฐํธ ์ฌ์ด์ฆ (Double ํ์
)
becomeFirstResponder: true) // true ๊ฐ ๋ค์ด๊ฐ๋ฉด, ์ด ํ์ด์ง๊ฐ ๋ํ๋ ๋ ์๋์ผ๋ก ํฌ์ปค์ค๊ฐ ์กํ๋ฉฐ ํค๋ณด๋ ์ฌ๋ผ์ด
์คํ์ด ์ด๋ ๊ฒ ๋ค์ด์จ๋ค๊ณ ๊ฐ์ ํด๋ณด์ฃ .
"์ต์ 2์ค์์ ์์, ์ต๋ 4์ค ๊น์ง๋ง ์ปค์ง๋ค๊ฐ ์คํฌ๋กค ์๋, ํฐํธ ์ฌ์ด์ฆ๋ 16 ์ผ๋ก ๋ถํ๋๋ ค์."
"์, ๋ฐฑ๊ทธ๋ผ์ด๋๋ quaternary ๋ก ๋ถํ๋๋ ค์."
TextMaster(
text: $text,
isFocused: $isTextMasterFocused,
minLine: 2,
maxLine: 5,
fontSize: 16)
.background(.quaternary)
์ด๋ฐ ์คํ์ ์ด๋จ๊น์?
"3์ค ๊น์ง๋ง ์ ๋ ฅ ๊ฐ๋ฅํ๋๋ก ๊ณ ์ ์์ผ ์ฃผ์ธ์. ๊ทธ ์ด์์์ ์คํฌ๋กค์ด ์๋ํด์ผ ํฉ๋๋ค."
TextMaster(
text: $text,
isFocused: $isTextMasterFocused,
minLine: 3,
maxLine: 3,
fontSize: 16)
์์ ๊ฐ์ด, TextMaster
๋ SwiftUI ์ TextEditor API ์ ํ๊ณ๋ฅผ ๋ฒ์ด๋๊ณ
์ค๋ฌด์์ ์๊ตฌ ๋ฐ๋ TextView ์คํ์ ์ฝ๊ฒ ๋ง์ถ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
ํน์๋ ๋ ์ถ๊ฐ๋ฅผ ์ํ๋ ๊ธฐ๋ฅ์ด๋ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๋ฉด, Issues์ ์ ์ํด์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค! ๐
- last edited: 2023-03-13(์)
- author: ํ๋์๋์ฐจ ์ ์ฌํธ ์ฐ๊ตฌ์