์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Core Data
- DispatchQueue
- ์ง๋ฒ๋ณํ
- Codable
- ์๊ณ ๋ฆฌ์ฆ
- CRUD
- Firestore CRUD
- SWiFT
- Encodable
- Mac
- ExpressJS
- RxSwift
- ios
- UIRefreshController
- AVAudioPlayer
- Reduce
- MongoDB
- ์ฑ๋ง๋ค๊ธฐ
- ์ฑ๋์์ธ
- nodejs
- Decodable
- mongoose
- Filter
- ํ๋ก๊ทธ๋๋จธ์ค
- String.Index
- Cloud Firestore
- Firestore
- map
- components
- Figma
- Today
- Total
Focus On Develop ๐ค๐ค
[Swift] UITextField ํ๊ธ ๊ธ์์ ์ ํ ๋ณธ๋ฌธ
[Swift] UITextField ํ๊ธ ๊ธ์์ ์ ํ
๋๋ฆฌ๋ฌ์ดํ 2021. 10. 26. 14:31
์ด๋ฒ ํฌ์คํ ์ UITextField์ ํ๊ธ์ ๋ ฅ์ ๊ธ์์ ์ ํํ๋ ๊ธฐ๋ฅ์ ์ ๋ฆฌํ๊ธฐ ์ํจ์ ๋๋ค!
์ด๋ฒ์ ๊ฐ๋ฐํ๋ฉด์ ๊ธ์์ ์ ํ์ด ์๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๋ฃ๊ฒ ๋๋๋ฐ, ์์ด๋ ์ด๋ชจ์ง๋ก๋ ๊ธ์์ ์ ํ์ด ์ ๋์ํ๋๋ฐ, ํ๊ธ ์ ๋ ฅ์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ๊ตฌ์ ๐ญ
์๋ฅผ๋ค๋ฉด 5์ ์ ํ์ด๋ผ๊ณ ํ ๋ "๊ฐ๋๋ค๋ผใ " ์ด๋ ๊ฒ "ใ "๋ฅผ ์น์ง ๋ชปํ๊ฒ ๋๊ฑฐ๋, "๊ฐ๋๋ค๋ผ๋ง"์ ์น๊ณ ์ถ์๋ฐ "๊ฐ๋๋ค๋ผ๋ง"+"ใ "์ด ์ ๋ ฅ์ด ์๋๊ฑฐ๋, "๊ฐ๋๋ค๋ผ๋ง"์์ ๊ณ์ ํ์ดํ์ "๋ง" ๋ถ๋ถ์ ํ์ดํํ๋ ๋ฌธ์๊ฐ ๊ณ์ ์ ๋ ฅ๋๊ฑฐ๋ ใ ใ ๊ทธ๋์ ๊ฒช์๋ ์ํ์ฐฉ์ค๋ฅผ ์ ๋ฆฌํ๋ฉด์ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ์์ฑํด๋๋ ค๊ณ ํด์!!
์๋ง ์ด ๊ธ์ ๋น์ธ๊ธฐ ๊ธ์ด๋ผ์ ใ ใ ๋๊ตฌ์๊ฒ ๋ ธ์ถ์ด ๋ ์ง ์ฌ์ค ์๋ชจ๋ฅด๊ฒ ์ง๋ง.. ์ด๊น์ง ์ค์ จ๋ค๋ฉด ์๋์ ์ฝ๋๋ ๋ณธ์ ๋ง์ผ์ค๊ฑฐ์์!
๊ตฌ๊ธ๋งํด๋ณด๋ฉด TextFieldDelegate์์ ์ ๊ณตํ๋ shouldChangeCharactersIn ๋ฉ์๋๋ฅผ ํตํด ์ ํํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ์ฅ ๋ณดํธ์ ์ด๊ณ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด๋๋ผ๊ตฌ์~~ shouldChangeCharactersIn ๋ฉ์๋๋ delegate๋ก ์ง์ ๋ textField์ ๋ญ๊ฐ ํ์ดํ์ด ๋๋ฉด ๋ค์ด์ค๊ฒ ๋๋ ๋ฉ์๋์์~~
์!! ํน์ ์๋์ ์ฝ๋๊น์ง ์๋ํด๋ณด์ ๋ถ์ด๋ฉด ์ ~~๊ธฐ์๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ๋ก skipํ์ ๋ ์ข์ต๋๋ค ๐
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
// backspace ํ์ฉ
if let char = string.cString(using: String.Encoding.utf8) {
let isBackSpace = strcmp(char, "\\b")
if isBackSpace == -92 {
return true
}
}
guard let text = textField.text else { return false }
if text.count >= MAX_LENGTH {
return false
}
return true
}
์ด๋ ๊ฒ ใ ใ ใ 5์์ ๋ ฅ์ ํ์๋ backspace๋ ๋จนํต์ด ๋๋ฉด ์๋๋๊น, backspace๊ฐ ์ ๋ ฅ์ผ๋ก ๋ค์ด์์๋๋ ํ์ฌ ๊ธ์์์ ์๊ด์์ด ์ ๋ ฅ๋ฐ์ ์ ์๋๋ก ์ธ์ฝ๋ฉํด์ ์ฐพ๋ ๋ฐฉ์์ผ๋ก ์ ์ฉํด์คฌ์ด์!
์ผํ ๋ณด๋ฉด ์ ๋์ํ๋ ๊ฒ ๊ฐ์ฃ ~~? ๊ทธ๋ฐ๋ฐ ์ฌ๊ธฐ์ "๊ฐ๋๋ค๋ผ๋ง" + ์์์ ํ์๋, ๋ฐ์นจ์ด ์ ๋ ฅ๋์ง ์์์. ์ด๋ฏธ MAX_LENGTH๋ก ์ง์ ํ 5์๊ฐ ๋์๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ด์ฃ ~ ๊ทธ๋์ ใ ใ shouldChangeCharactersIn ๋ฉ์๋๋ฅผ ํตํด์๋ ์๋๊ฒ ๊ตฌ๋ ์ถ์์ด์.
PS. ์ด๋ ๊ฒ ํ๊ธ์ ๋ ฅ์ ๋ฐ์นจ์ด ์ ๋ ฅ๋์ง ์๋ ๋ฒ๊ทธ๊ฐ textField ๋์ textView๋ก ์ ์ฉํ๋ฉด ๋๋ค๋ ํฌ์คํ ์ ๋ดค๋๋ฐ, ์ ๊ฐ ์ง์ ํด๋ดค์ต๋๋ค. ๋๊ฐ์ด ์๋ฉ๋๋ค. ์๊ฐ๋ญ๋น ํ์ง๋ง์ธ์~~
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด๋ค๊ฐ.. ๋ง์ฝ์ textField์ ๊ธ์์๋ฅผ ํ์ธํด์ ์ํ๋ ๊ธธ์ด๋ณด๋ค ๊ธธ๋ฉด ๊ทธ๋ฅ ์๋ผ์ ๋ณด์ฌ์ฃผ๋ฉด ๋ง์น ๋ฑ ๊ทธ ๊ธธ์ด๊น์ง๋ง ๋ณด์ฌ์ง์ง ์์๊น? ๋ผ๋ ์์ ์ผ๋ก ๋ณ๊ฒฝํด๋ดค์ด์. shouldChangeCharactersIn ์ด ๋ฉ์๋๋ ๊ณผ๊ฐํ ๋ฒ๋ฆฌ๊ณ .. ์ต์ ๋ฒ๋ฅผ ์ถ๊ฐํด์ฃผ์์ด์.
NotificationCenter.default.addObserver(self, selector: #selector(textDidChange), name: UITextField.textDidChangeNotification, object: nil)
UITextField์ ๋ญ๊ฐ ๋ณํ๊ฐ ์๊ธฐ๋ฉด textDidChange๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋๋ก ํ ๊ฑฐ๊ณ , ์ด ๋ฉ์๋๋ ์๋์ ๊ฐ์์.
@objc func textDidChange(noti: NSNotification) {
if let text = messageTextField.text {
if text.count >= MAX_LENGTH {
let fixedText = text.subString(startIndex: 0, endIndex: MAX_LENGTH - 1)
messageTextField.text = fixedText
}
}
}
๊ทธ๋ฅ ๋ด๊ฐ ์ง์ ํ ๊ธธ์ด๋ณด๋ค ๊ธธ๋ฉด ์ง์ ํ ๊ธธ์ด๊น์ง๋ง ์งค๋ผ์ค~ ํ๊ณ ๋ง์ด์ฃ . ๊ทธ๋ฐ๋ฐ...
์ด๋ ๊ฒ ใ ใ 5์๋ผ๊ณ ํ์๋ 5์๊น์ง๋ง ๋ณด์ฌ์ง๋๊ฑด ๋ง์์..๊ทธ๋ฐ๋ฐ ๋ญ ์น ๋๋ง๋ค 5๋ฒ์งธ ๊ธ์๊ฐ ๋ฐ๋์ด๋ฒ๋ฆฌ๋ ํ์์ด.. ๊ทธ๋ฆฌ๊ณ ์ง์ฐ๋ ๊ณผ์ ์์๋ ํ์ดํํ๋ ๋ฌธ์๋ค์ด ๊ฐ์๊ธฐ ๋ง ๋ฑ์ฅํ๋ ๊ทธ๋ฐ ๊ธฐ๊ดดํ ํ์์ด..๋๋ฅด๋ฅด...ใ ใ ใ
์ ๋ ์ฒ์์๋ ๋ญ๊ฐ buffer๊ฐ์๊ฒ ์์ด์, ๊ฑฐ๊ธฐ์ ๊ธฐ๋ก๋ ๋ฌธ์๋ค์ด ๋์ค๋ ๊ฑฐ๋ผ๊ณ ์๊ฐ์ ํ๋๋ฐ์~ ๊ทธ๊ฒ ์๋๋๋ผ๊ตฌ์.
์์ธ์ textField์ ์ ๋ ฅ ํฌ์ง์ (์ง๊ธ ์ ๋ ฅ๋์ด์ผ ํ ์๋ฆฌ)๊ฐ 6๋ฒ์งธ ๊ธ์๊ฐ ์๋๋ผ, 5๋ฒ์งธ์ ๋จธ๋ฌผ๋ฌ ์๊ธฐ ๋๋ฌธ์ด์์ด์.
์ฆ, "์ผ์ด์ผ์ฌ์ค" ๋ผ๊ณ ํ์ดํ์ ํ๋ฉด ์ ๊ฐ ์ํ๋ ์ ๋ ฅ ํฌ์ง์ ์ "์ค" ๋ค์์ ์์นํด์ ํ์ดํ์ ํด๋ "์ค" ์ดํ๋ก๋ ๊ทธ๋ฅ ์งค๋ฆฌ๊ธฐ๋ฅผ ๋ฐ๋ฌ์ด์. ํ์ง๋ง ์ค์ ๋ก๋.. "์ค" ์์น์ ์ ๋ ฅํฌ์ง์ ์ด ์ค์ ๋๋ ๊ฑฐ์ฃ . ๊ทธ๋์ "์ค"๋ผ๋ ํฌ์ง์ ์ ๊ธ์๊ฐ ๊ณ์ ๋ฐ๋๋ ํ์์ด.. ๐ญ
๊ทธ๋ผ ์ ๋ ฅ ํฌ์ง์ ๋ง "์ค" ๋ค๋ก ์ค์ ํด์ฃผ๋ ๊ผผ์(?)๋ง ์์ผ๋ฉด ์ด๋จ๊น, ์ถ์ด์ ์๋์ ๊ฐ์ด ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ์์ด์!
ํด๊ฒฐ๋ฐฉ๋ฒ
@objc func textDidChange(noti: NSNotification) {
if let text = messageTextField.text {
if text.count >= MAX_LENGTH {
let fixedText = text.subString(startIndex: 0, endIndex: MAX_LENGTH - 1)
messageTextField.text = fixedText + " "
let when = DispatchTime.now() + 0.01
DispatchQueue.main.asyncAfter(deadline: when) {
self.messageTextField.text = fixedText
}
}
}
}
์ด๋ ๊ฒ ์ ๋ ฅํ ๋ฌธ์ ๋ค์ " " ๊ณต๋ฐฑ ํ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด์ ์ ๋ ฅํฌ์ง์ ์ ๋ง์น "์ค"๋ค์์ผ๋ก ์์๋ก ๋ง๋ค์ด ๋ฒ๋ฆฌ๋๊ฑฐ์ฃ .
์๋ฌธ์ด๋ ์ด๋ชจ์ง ๋ฑ์ ์ํฅ์ด ์์ง๋ง.. ์ด๊ฒ ํ๊ธ์ด ์ด์ฑ, ์ค์ฑ, ์ข ์ฑ์ผ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋๋ผ๊ตฌ์.
ํ๋ฉด์์ ๋์์ ์ ํด๊ฒฐํ ๊ฒ ๊ฐ์๋ฐ.. ๊ทธ๋๋ ์ธ์ ๊น์ง๋ ๊ผผ์์ด๊ธฐ ๋๋ฌธ์ ๐
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ธ์ ๋ ฅ์ ๊ธ์์ ์ ํํ๋ ๊ฒ ๊ด๋ จํด์ ํด๊ฒฐํ์ ๋ถ ์์ผ๋ฉด ๊ณต์ ํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์์~~
๊ทธ๋ผ ์ค๋๋ ๋๊ตฐ๊ฐ์๊ฒ ๋์์ด ๋์๊ธธ ๋ฐ๋์ ๐
'iOS [Swift] > ๊ธฐ์ด๋ฅผ ํํํ!' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] Realm ํ์ผ ๊ฒฝ๋กํ์ธ (0) | 2022.10.02 |
---|---|
[Swift] AssociatedType (0) | 2021.08.23 |
[Swift] Error Handling (0) | 2021.07.27 |
[Swift] Bento #1. iPhone ์ฐ๋ฝ์ฒ ๊ฐ์ ธ์ค๊ธฐ (0) | 2021.04.27 |
[RxSwift] Subject (0) | 2021.03.30 |