๊ณต์๋ฌธ์ : A control that displays an editable text interface.
์ฌ์ฉ์๊ฐ ํ ์คํธ๋ฅผ ํธ์งํ ์ ์๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค์ด๋ค.
์ฝ๊ฒ ๋งํด ์ฌ์ฉ์๊ฐ ํ ์คํธ๋ฅผ ์์ ํ ์ ์๋ ๋ทฐ์ธ ๊ฒ์ด๋ค.
@MainActor @preconcurrency
struct TextField<Label> where Label : View
@State private var username: String = ""
@FocusState private var emailFieldIsFocused: Bool = false
var body: some View {
TextField(
"User name (email address)",
text: $username
)
.focused($emailFieldIsFocused)
.onSubmit {
validate(name: username)
}
.textInputAutocapitalization(.never)
.disableAutocorrection(true)
.border(.secondary)
Text(username)
.foregroundColor(emailFieldIsFocused ? .red : .blue)
}
TextField๋ฅผ ์ฌ์ฉํ ๋๋ ํ ์คํธ๊ฐ ์์ ๋ ๋ํ๋๋ ํ๋ ์ด์คํ๋๋ฅผ String๊ฐ์ผ๋ก ์ง์ ํ ์ ์์ผ๋ฉฐ, ์์์ ๋ณด์ด๋ username๊ณผ ๊ฐ์ด ๋ฐ์ธ๋ฉ ๋ state ๋ณ์๊ฐ ํ์ํ๋ค.
๋ฐ์ธ๋ฉ์ผ๋ก ๋ฐ์ username์๋ ํ ์คํธํ๋์ ์ ๋ ฅํ ๊ฐ์ด ์ ์ฅ๋๋ฉฐ, ํด๋น ๋ณ์๋ฅผ ๋ค๋ฅธ Text๋ทฐ์์๋ ์ฌ์ฉํ ์ ์๋ค.
์ ์์์์๋ .focused() modifier๋ฅผ ์ด์ฉํด์ ํ ์คํธ ํ๋๋ฅผ ์์ ํ๊ณ ์๊ฑฐ๋ ์๋ ๋๋ฅผ ๊ตฌ๋ถํด Text์ ์์์ ๋ณ๊ฒฝํ๊ณ ์๋ค.
๋ํ onSubmit modifier๋ ์์ ์ ์๋ฃ ํ์ ๋ ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๋ค. ์ ์์์์ validate(name: username) ๋ฉ์๋๋ฅผ ํ ์คํธํ๋ ์ ๋ ฅ์ ์๋ฃํ์ ๋ ์คํํ๊ฒ๋๋ค.