UITextField
UITextField๋ ์ฌ์ฉ์๋ก๋ถํฐ ํ ์คํธ ์ ๋ ฅ์ ๋ฐ์ ์ ์๋ ์ธํฐํ์ด์ค ์์์ด๊ณ ,
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ UITextField์ ๋์์ ์ปค์คํฐ๋ง์ด์งํ๊ณ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
textField.delegate = self -> ํ ์คํธํ๋์ ๋๋ฆฌ์๊ฐ ๋ทฐ์ปจ์ด ๋จ. ํ ์คํธํ๋์์ ์ผ์ด๋๋ ์ผ ์ ๋ฌ ๋ฐ์
ํ ์คํธํ๋์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋ฉด ๊ทธ ์์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ ํ ๋ ๋ฉ์๋๋ฅผ ์ฑํํ๊ณ ๊ตฌํํ๋ผ.
textField.becomeFirstResponder() //ํค๋ณด๋ ์ฌ๋ผ์ด
textField.resignFirstResponder() //ํค๋ณด๋ ๋ด๋ ค๊ฐ
์ฃผ์ UITextField Delegate ๋ฉ์๋์ ์ฌ์ฉ ์์
textFieldShouldBeginEditing(_:)
ํ
์คํธ ํ๋๊ฐ ํธ์ง์ ์์ํ๊ธฐ ์ ์ ํธ์ถ๋๋ค. ์ฌ์ฉ์๊ฐ ํ
์คํธ ํ๋๋ฅผ ์ ํํ ๋ ํน์ ์์
์ ์ํํ๊ฑฐ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ํธ์ง์ ๋ง๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
// ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ
์คํธ ํ๋๊ฐ ํธ์ง ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ๊ฒฐ์
return true // true๋ฅผ ๋ฐํํ๋ฉด ํธ์ง์ด ์์๋จ
}
textFieldDidBeginEditing(_:)
ํ ์คํธ ํ๋๊ฐ ํธ์ง์ ์์ํ ์งํ์ ํธ์ถ๋๋ค. ํ ์คํธ ํ๋๊ฐ ํ์ฑํ๋์์ ๋ ํน์ ์์ ์ ํ๊ณ ์ถ์ ๋ ์ฌ์ฉ๋๋ค.
func textFieldDidBeginEditing(_ textField: UITextField) {
print("Editing started")
}
textFieldShouldEndEditing(_:)
ํ ์คํธ ํ๋์ ํธ์ง์ด ์ข ๋ฃ๋๊ธฐ ์ ์ ํธ์ถ๋๋ค. ํธ์ง ์ข ๋ฃ๋ฅผ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
// ์กฐ๊ฑด์ ๋ฐ๋ผ ํธ์ง ์ข
๋ฃ๋ฅผ ํ์ฉํ ์ง ๊ฒฐ์
return true
}
textFieldDidEndEditing(_:)
ํ ์คํธ ํ๋์ ํธ์ง์ด ์ข ๋ฃ๋ ํ ํธ์ถ๋๋ค. ์ฌ์ฉ์ ์ ๋ ฅ์ด ์๋ฃ๋ ํ ํน์ ์์ ์ ์ํํ๊ณ ์ถ์ ๋ ์ฌ์ฉ๋๋ค.
func textFieldDidEndEditing(_ textField: UITextField) {
print("Editing ended")
}
textField(_:shouldChangeCharactersIn:replacementString:)
ํ ์คํธ ํ๋์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๊ธฐ ์ง์ ์ ํธ์ถ๋๋ค. ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํ ์คํธ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฒ์ฌํ๊ฑฐ๋ ์ ํํ๊ณ ์ถ์ ๋ ์ ์ฉํ๋ค.
ํ ์คํธํ๋์ ๊ธ์ ๋ด์ฉ์ด ํ๊ธ์ํ๊ธ์ ์ ๋ ฅ๋๊ฑฐ๋ ์ง์์ง ๋ ํธ์ถ๋๋ค.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// ์
๋ ฅ๋ ํ
์คํธ๋ฅผ ์ ํํ๊ฑฐ๋ ํํฐ๋งํ ์ ์์
let currentText = textField.text ?? ""
let updatedText = (currentText as NSString).replacingCharacters(in: range, with: string)
// ์: ์
๋ ฅ๋ ํ
์คํธ๊ฐ 10์๋ฅผ ๋์ง ์๋๋ก ์ ํ
return updatedText.count <= 10
// ์ด๋ฉ์ผ ์ฃผ์ ํจํด ํ์ธ - ์ ๊ท์
let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}"
let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex)
return emailTest.evaluate(with: updatedText)
}
}
//์ค์๊ฐ ํผ๋๋ฐฑ ์ ๊ณต - ์
๋ ฅ์ด ์ ์ฉํ์ง ์์ผ๋ฉด ํ
์คํธํ๋ ํ
๋๋ฆฌ ์ ๋ณ๊ฒฝ ๋๋ ๋ฉ์์ง ํ์ ๋ฑ
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let currentText = textField.text ?? ""
let updatedText = (currentText as NSString).replacingCharacters(in: range, with: string)
if !validateInput(text: updatedText) {
textField.layer.borderColor = UIColor.red.cgColor
textField.layer.borderWidth = 1.0
} else {
textField.layer.borderColor = UIColor.green.cgColor
textField.layer.borderWidth = 1.0
}
return true
}
textFieldShouldReturn(_:)
์ฌ์ฉ์๊ฐ ๋ฆฌํด(Return) ํค๋ฅผ ๋๋ ์ ๋ ํธ์ถ๋๋ค. ์ฃผ๋ก ํค๋ณด๋๋ฅผ ์จ๊ธฐ๊ฑฐ๋ ๋ค์ ์ ๋ ฅ ํ๋๋ก ์ด๋ํ๋ ๋ฑ์ ์์ ์ ํ ๋ ์ฌ์ฉ๋๋ค.
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder() // ํค๋ณด๋ ์จ๊ธฐ๊ธฐ
return true
}
์ฌ๋ฌ๊ฐ์ UITextField๊ฐ ์๋ ์ํฉ์์ ํน์ ํ ์คํธ ํ๋์๋ง ์ ์ฉํ๋ ค๋ฉด?
// Tag๋ฅผ ์ฌ์ฉํ ์๋ณ
override func viewDidLoad() {
super.viewDidLoad()
textField1.tag = 1
textField2.tag = 2
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField.tag == 1 {
// textField1์๋ง ์ ์ฉ๋ ์ ํ
return string.allSatisfy { $0.isNumber } // ์ซ์๋ง ์
๋ ฅ ๊ฐ๋ฅ
} else if textField.tag == 2 {
// textField2์๋ง ์ ์ฉ๋ ์ ํ
return string.count <= 1 // ํ ๋ฒ์ ํ ๊ธ์๋ง ์
๋ ฅ ๊ฐ๋ฅ
}
return true
}
// ํ
์คํธํ๋ ๊ฐ์ฒด๋ฅผ ์ง์ ๋น๊ต
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if textField === textField1 {
// textField1์ ์ ์ฉ๋ ์ ํ
return string.count <= 5 // ์ต๋ 5๊ธ์ ์ ํ
} else if textField === textField2 {
// textField2์ ์ ์ฉ๋ ์ ํ
return string.allSatisfy { $0.isUppercase } // ๋๋ฌธ์๋ง ํ์ฉ
}
return true
}
'๐ iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Swift ] Error Handling (1) | 2024.11.05 |
---|---|
Alert๊ณผ ๋๊ธฐ/๋น๋๊ธฐ ๊ฐ๋ (0) | 2024.08.29 |
[ Swift ] ํ๋กํ ์ฝ(protocol) (0) | 2024.08.25 |
[ Swift ] ํ๋กํผํฐ(Property) / NetworkManager์ shared (0) | 2024.08.24 |
SceneDelegate์์ navigationController ์ค์ (0) | 2024.08.04 |