๐Ÿ“–TextField

์ธํ„ฐํŽ˜์ด์Šค์— ํŽธ์ง‘ ๊ฐ€๋Šฅํ•œ ํ…์ŠคํŠธ ์˜์—ญ์„ ํ‘œ์‹œํ•˜๋Š” ๊ฐœ์ฒด

๐Ÿ“–TextField์˜ ๋‹ค์–‘ํ•œ ์†์„ฑ๋“ค

๐Ÿ“Žํ‚ค๋ณด๋“œ ์ข…๋ฅ˜

textField.keyboardType = .default
textField.keyboardType = .URL
textField.keyboardType = .numberPad
textField.keyboardType = .phonePad
textField.keyboardType = .emailAddress
textField.keyboardType = .webSearch

๐Ÿ“Žreturn Key ์ข…๋ฅ˜

textField.returnKeyType = .default
textField.returnKeyType = .done
textField.returnKeyType = .go
textField.returnKeyType = .join
textField.returnKeyType = .next

๐Ÿ“Ž๊ธฐํƒ€ ์†Œ์†Œ ์ •๋ณด

textField.placeholder = "์ด๋ฉ”์ผ ์ž…๋ ฅ" // ๋‹ค๋ฅธ ํ…์ŠคํŠธ๊ฐ€ ์—†์„ ๋•Œ ํ‘œ์‹œ๋˜๋Š” ๋ฌธ์ž์—ด(ํฌ๋ฏธํ•œ ์•ˆ๋‚ด ๋ฌธ๊ตฌ)
 
textField.autocapitalizationType = .none // ์ž๋™์œผ๋กœ ์•ž๋ฌธ์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ
 
textField.autocorrectionType = .no // ์ž๋™ ์ˆ˜์ • ํ™œ์„ฑํ™”
 
textField.spellCheckingType = .no // ๋งž์ถค๋ฒ• ๊ฒ€์‚ฌ ํ™œ์„ฑํ™”
 
textField.clearsOnBeginEditing = false // ํ…์ŠคํŠธํ•„๋“œ ํด๋ฆญ ์‹œ ์ด๋ฏธ ์ ํ˜€์žˆ๋Š” ๋‚ด์šฉ ์‚ญ์ œ
 
textField.isSecureTextEntry.toggle() // ํ…์ŠคํŠธ๋ฅผ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ˜•์‹์œผ๋กœ ํ…์ŠคํŠธ๊ฐ€ ๋ณด์ด์ง€ ์•Š๋„๋ก ํ•จ
 
textField.clearButtonMode = .always // ์ „์ฒด ๋‚ด์šฉ ์‚ญ์ œํ•  "x ๋ฒ„ํŠผ" ํ‘œ์‹œ

๐Ÿ“–TextField์˜ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด

method์˜ return๊ฐ’์ด Bool์ด ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ๋ณดํ†ต ์–ด๋– ํ•œ ์‹œ์ ์„ ์˜๋ฏธ

๐Ÿ“Ž์ž…๋ ฅ์„ ์‹œ์ž‘ํ• ์ง€๋ง์ง€ ์—ฌ๋ถ€๋ฅผ ํ—ˆ๋ฝํ•˜๋Š” func

// textField์˜ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•  ๋•Œ ํ˜ธ์ถœ๋จ
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    
    return true
}

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ์— ์ž…๋ ฅ์ด ์‹œ์ž‘๋œ ์‹œ์ ์„ ์•Œ๋ ค์ฃผ๋Š” func

// ์œ ์ €๊ฐ€ ์ž…๋ ฅ์„ ์‹œ์ž‘ํ•œ ์‹œ์ ์— ํ˜ธ์ถœ๋จ
func textFieldDidBeginEditing(_ textField: UITextField) {
 
}

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ์— ๊ธ€์ž์˜ ์ž…๋ ฅ/์‚ญ์ œ๋ฅผ ํ—ˆ๋ฝํ•˜๋Š” func

๋ฌธ์ž ์ž…๋ ฅ์— ์ œํ•œ์„ ๋‘๋Š” ์ƒํ™ฉ์— ์ž์ฃผ ์‚ฌ์šฉ

// ํ…์ŠคํŠธํ•„๋“œ์˜ ๊ธ€์ž๊ฐ€ ์ž…๋ ฅ๋˜๊ฑฐ๋‚˜ ์ง€์›Œ์งˆ ๋•Œ ํ˜ธ์ถœ๋จ
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    
    return true
}

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ์—์„œ return key๊ฐ€ ๋ˆŒ๋Ÿฌ์ง„ ํ›„ ๋‹ค์Œ ๋™์ž‘์„ ํ—ˆ๋ฝํ•˜๋Š” func

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    // ํ…์ŠคํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ํ‚ค๋ณด๋“œ ๋‚ด๋ ค๊ฐ
    if textField.text != "" {
        textField.resignFirstResponder()
				 return true
    }
    
    return false
}

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ์˜ ์ž…๋ ฅ์„ ๋๋‚ผ์ง€ ๋ง์ง€๋ฅผ ํ—ˆ๋ฝํ•˜๋Š” func

// textField์˜ ์ž…๋ ฅ์ด ๋๋‚  ๋•Œ ํ˜ธ์ถœ
func textFieldShouldEndEditing(_ textField: UITextField) -> Bool {
    
    return true
}

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ์— ์ž…๋ ฅ์ด ๋๋‚œ ์‹œ์ ์„ ์•Œ๋ ค์ฃผ๋Š” func

func textFieldDidEndEditing(_ textField: UITextField, reason: UITextField.DidEndEditingReason) {
    print("์œ ์ €๊ฐ€ ์ž…๋ ฅ ๋๋ƒ„")
    textField.text = ""
}

๐Ÿ“–TextField์™€ First Responder

๐Ÿ“Žํ…์ŠคํŠธํ•„๋“œ๋ฅผ FirstResponder๋กœ ์„ค์ •/ํ•ด์ง€

textField.becomeFirstResponder() // ์„ค์ •
textField.resignFirstResponder() // ํ•ด์ง€

First Responder๋กœ ์ง€์ •๋˜๋Š” ๋™์ž‘๊ณผ์ •

  1. TextField ํด๋ฆญ
  2. TextField Delegate๊ฐ€ textFieldShouldBeginEditing() ํ˜ธ์ถœ
  3. textFieldShouldBeginEditing()๊ฐ€ true ๋ฆฌํ„ด (ํ…์ŠคํŠธ ํ•„๋“œ์— ์ž…๋ ฅ ํ—ˆ์šฉ)
  4. TextField๊ฐ€ First Responder๋กœ ์ง€์ •๋จ
  5. UIKit์ด TextField์˜ Input View๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋ ค๊ณ  ์‹œ๋„(Input View : ์ž…๋ ฅ์„ ๋ฐ›๋Š” ๋ทฐ. ์ฆ‰, ํ‚ค๋ณด๋“œ)
  6. ํ‚ค๋ณด๋“œ ํ‘œ์‹œ

First Responder๋กœ์„œ์˜ ์ž๊ฒฉ ํฌ๊ธฐํ•œ๋‹ค๋ฉด?

Input View์ด ํ™”๋ฉด์—์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋จ ํ‚ค๋ณด๋“œ์•ผ ํ™”๋ฉด์—์„œ ์•ˆ๋…•~!!

ํ™”๋ฉด์— ๋“ค์–ด๊ฐ€์ž๋งˆ์ž ํ…์ŠคํŠธํ•„๋“œ์˜ ํ‚ค๋ณด๋“œ ์˜ฌ๋ผ๊ฐ€๋„๋ก ๊ตฌํ˜„

override func viewDidLoad() {
    textField.becomeFirstResponder()
}

ํ…์ŠคํŠธํ•„๋“œ ์˜์—ญ ์™ธ์˜ ์˜์—ญ ํ„ฐ์น˜ ์‹œ ํ…์ŠคํŠธํ•„๋“œ์˜ ํ‚ค๋ณด๋“œ ๋‚ด๋ ค๊ฐ€๋„๋ก ๊ตฌํ˜„

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    // 1๋ฒˆ ๋ฐฉ๋ฒ•
    self.view.endEditing(true)
    // 2๋ฒˆ ๋ฐฉ๋ฒ•
    textField.resignFirstResponder()
}

๐Ÿ“–TextField Snippets