πŸ“‘ [iOS] UITextFieldDelegate

su_veraΒ·2021λ…„ 10μ›” 17일

iOS

λͺ©λ‘ 보기
1/6
post-thumbnail

μ˜€λžœλ§Œμ— Velog .. !

μ΅œκ·Όμ— κ³΅λΆ€ν•˜λ©΄μ„œ λ…Έμ…˜μ—λ§Œ μ •λ¦¬ν–ˆμ—ˆλŠ”λ° 가끔씩 λ²¨λ‘œκ·Έμ—λ„ ν¬μŠ€νŒ…ν•˜λ©΄ 쒋을 것 κ°™μ•„μ„œ μ‘°κΈˆμ”© μ‹œμž‘ν•΄λ³΄λ €κ³  ν•œλ‹Ή πŸ₯

UITextFieldDelegateλŠ” λ‚˜μ€‘μ—λ„ 계속 쓰일 것 κ°™μ•„μ„œ λ…Έμ…˜μ— 정리해둔 λ‚΄μš©μœΌλ‘œ κ°„λ‹¨ν•˜κ²Œ .. :)

κ³Όμ œν•˜λ©΄μ„œ κ΅¬ν˜„ν•œ 둜그인, νšŒμ›κ°€μž… λ·° 슬쩍... ^^

πŸ“Œ UITextFieldDelegate λž€?
ν‚€λ³΄λ“œ μž…λ ₯ 및 μ „λ°˜μ μΈ text field νŽΈμ§‘κ³Ό κ΄€λ ¨λœ κΈ°λŠ₯듀을 μˆ˜ν–‰ν•˜λŠ” ν”„λ‘œν† μ½œ

πŸ“„ Apple Developer Documentation - UITextFieldDelegate

Declaration

protocol UITextFieldDelegate

Overview

ν…μŠ€νŠΈ ν•„λ“œλŠ” μ€‘μš”ν•œ 변화에 λŒ€μ‘ν•΄ 델리게이트 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€. μ‚¬μš©μžκ°€ μž…λ ₯ν•œ ν…μŠ€νŠΈλ₯Ό κ²€μ¦ν•˜κ³  ν‚€λ³΄λ“œμ™€μ˜ νŠΉμ • μƒν˜Έμž‘μš©μ— μ‘λ‹΅ν•˜λ©°, 전체 νŽΈμ§‘ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ œμ–΄ν•˜λŠ”λ° 이 λ©”μ†Œλ“œλ“€μ„ μ‚¬μš©ν•œλ‹€. νŽΈμ§‘μ€ ν…μŠ€νŠΈ ν•„λ“œκ°€ first responderκ°€ 되기 직전에 μ‹œμž‘λ˜κ³  ν‚€λ³΄λ“œ(λ˜λŠ” ν• λ‹Ήλœ input view)λ₯Ό ν‘œμ‹œν•œλ‹€. νŽΈμ§‘ κ³Όμ •μ˜ 흐름은 λ‹€μŒκ³Ό κ°™λ‹€.


πŸ“ first responder κ°€ λ˜κΈ°μ „ ν…μŠ€νŠΈ ν•„λ“œλŠ” λΈλ¦¬κ²Œμ΄λ“œμ˜ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€ ! textFieldShouldBeginEditing(_:) : μ§€μ •λœ ν…μŠ€νŠΈν•„λ“œμ—μ„œ νŽΈμ§‘μ„ μ‹œμž‘ν• μ§€ μ—¬λΆ€

πŸ“ text fieldκ°€ ν™œμ„±ν™” 되면 ν…μŠ€νŠΈ μž…λ ₯을 μœ„ν•œ ν‚€λ³΄λ“œ 생성 !

πŸ’‘ 보톡 ν•΄λ‹Ή text fieldλ₯Ό ν„°μΉ˜ν•˜λ©΄ λ°”λ‘œ ν™œμ„±ν™”κ°€ λ˜μ§€λ§Œ, ν„°μΉ˜ν•˜κΈ° 전에 μžλ™μœΌλ‘œ text field μž…λ ₯을 μ‹œμž‘ν•˜λ„λ‘ ν‚€λ³΄λ“œλ₯Ό λ„μš°λ €λ©΄ textfield.becomeFirstResponder() μ„ μ–Έ!

πŸ“ textFieldDidBeginEditing(_:) : μ§€μ •λœ ν…μŠ€νŠΈ ν•„λ“œμ—μ„œ νŽΈμ§‘μ΄ μ‹œμž‘λ  λ•Œ μ•Œλ €μ€Œ

πŸ“ text field νŽΈμ§‘ 쀑에 ν˜ΈμΆœλ˜λŠ” λ‹€μ–‘ν•œ delegate λ©”μ„œλ“œλ“€ 쀑 textFieldShouldReturn(_:)은 μ‚¬μš©μžκ°€ ν‚€λ³΄λ“œμ˜ return λ²„νŠΌμ„ νƒ­ ν–ˆμ„ λ•Œ ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜λ‘œ μœ μš©ν•˜κ²Œ μ‚¬μš© κ°€λŠ₯ !

πŸ“ textFieldShouldEndEditing(_:) : μ§€μ •λœ ν…μŠ€νŠΈ ν•„λ“œμ—μ„œ νŽΈμ§‘μ„ 쀑지할지 μ—¬λΆ€λ₯Ό λ¬Όμ–΄λ΄„ !

πŸ“ text field λΉ„ν™œμ„±ν™” ν•˜κ³  ν‚€λ³΄λ“œ 숨기기 -> textField.resignFirstResponder() 둜 직접 호좜 κ°€λŠ₯ !

πŸ“ textFieldDidEndEditing(_:) : μ§€μ •λœ ν…μŠ€νŠΈ ν•„λ“œμ— λŒ€ν•œ νŽΈμ§‘μ΄ 쀑지될 λ•Œ μ•Œλ¦Ό !


🧸 λ‚΄κ°€ UITextFieldDelegateλ₯Ό ν™œμš©ν•˜μ—¬ κ΅¬ν˜„ν•œ κΈ°λŠ₯ !

  1. textFieldDidEndEditing(_:) λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ name,email,password ν…μŠ€νŠΈ ν•„λ“œκ°€ λͺ¨λ‘ μ±„μ›Œμ§€κ³ , νŽΈμ§‘μ΄ μ™„λ£Œλœ κ²½μš°μ—λ§Œ λ‹€μŒ λ²„νŠΌμ΄ ν™œμ„±ν™” λ˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€λ‹€.

    μ—¬κΈ°μ„œ .hasText λŠ” ν…μŠ€νŠΈ ν•„λ“œμ•ˆμ— ν…μŠ€νŠΈκ°€ μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λŠ” Boolean value 이고, ν…μŠ€νŠΈκ°€ 있으면 Trueλ₯Ό return !
    .isEnabledλŠ” λ²„νŠΌμ΄ ν™œμ„±ν™” μƒνƒœμΈμ§€ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹Ή !

  2. textFieldShouldReturn(_:) λŠ” λŒ€λ¦¬μžμ—κ²Œ ν…μŠ€νŠΈ ν•„λ“œμ— λŒ€ν•œ Return λ²„νŠΌ λˆ„λ¦„μ„ μ²˜λ¦¬ν• μ§€ μ—¬λΆ€λ₯Ό λ¬»λŠ” λ©”μ†Œλ“œ ! 이건 처음 ν…μŠ€νŠΈ ν•„λ“œμ—μ„œ μž…λ ₯ν•˜κ³  ν‚€λ³΄λ“œμ—μ„œ 'next' λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ‹€μŒ 칸으둜 λ„˜μ–΄κ°€λ„λ‘ ν•˜κ³  맨 λ§ˆμ§€λ§‰ μΉΈμ—μ„œ 'done' λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ μž…λ ₯을 λ§ˆμΉ˜λ„λ‘ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν–ˆλ‹€.

    nameTextField인 경우 'next' λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ λ‹€μŒ 칸인 emailTextField에 becomeFirstResponder()λ₯Ό μ„ μ–Έν•¨μœΌλ‘œμ¨ λ‹€μŒμΉΈμ—μ„œ μž…λ ₯을 λ°”λ‘œ μ‹œμž‘ν•  수 μžˆλ‹Ή ν›„ν›„ πŸ™Š
    그리고 λ§ˆμ§€λ§‰ ν…μŠ€νŠΈ ν•„λ“œμ—μ„œ resignFirstResponder()λ₯Ό ν•΄μ£Όλ©΄ ν˜„μž¬ μƒνƒœλ₯Ό ν¬κΈ°ν•˜κ³  ν‚€λ³΄λ“œκ°€ λ‚΄λ €κ°€κ²Œ λœλ‹€ ! πŸ•Ά

πŸ”– κ·Έ μ™Έ κ³ λ €ν•œ 사항

  • ViewController Class에 UITextFieldDelegate ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜κ³ , viewDidLoad()에 textField.delegate = self둜 상속을 ν•΄μ€˜λ„ λœλ‹€. 일단 λ‚˜λŠ” extension으둜 λ”°λ‘œ λΉΌμ„œ κ΅¬ν˜„ν•΄μ€Œ !

  • Extension은 ꡬ쑰체, 클래슀, μ—΄κ±°ν˜•, ν”„λ‘œν† μ½œμ˜ μΆ”κ°€ κ΅¬ν˜„λΆ€, μ œμ•½μ‚¬ν•­, κΈ°λŠ₯듀을 μ •μ˜ ν•  수 μžˆλŠ” μœ μš©ν•œ κΈ°λŠ₯..^^ ν”„λ‘œν† μ½œ κ΅¬ν˜„λΆ€λ₯Ό κΈ°λŠ₯λ³„λ‘œ λ¬Άμ–΄μ„œ νŽΈν•˜κ²Œ 볼수 μžˆλ‹€. μ΅μŠ€ν…μ…˜μ€ νƒ€μž…μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  μˆ˜λŠ” μžˆμ§€λ§Œ, 기쑴에 μ‘΄μž¬ν•˜λŠ” κΈ°λŠ₯을 μž¬μ •μ˜ν•  μˆ˜λŠ” μ—†λ‹€κ³  ν•œλ ... !! λ°‘μ˜ λΈ”λ‘œκ·Έμ—μ„œ 클래슀 상속과 μ΅μŠ€ν…μ…˜μ˜ 차이λ₯Ό 잘 μ„€λͺ…ν•΄λ‘¬μ„œ μ°Έκ³ ν•˜κ³  κ³΅λΆ€ν–ˆλ‹Ή

    πŸ“š Extension κ΄€λ ¨ κΈ€ - μ•Όκ³°λΈ”λ‘œκ·Έ

profile
iOS 개발일기 ✨

0개의 λŒ“κΈ€