Computer >> 컴퓨터 >  >> 프로그래밍 >> iOS

iOS에서 텍스트 필드 입력 시 글자 수를 실시간으로 계산하는 방법

iOS 개발자라면 텍스트 필드(UITextField)와 그 동작을 다루는 방법을 반드시 알아야 합니다. Apple은 이를 위해 UITextFieldDelegate 프로토콜을 미리 제공하고 있습니다.


자세한 내용은 Apple 공식 문서(UITextFieldDelegate 문서)에서 확인할 수 있습니다.


회원가입 폼이나 설문 양식처럼 입력란이 있는 앱을 사용해 보셨다면, 타이핑할 때마다 현재 입력된 글자 수가 화면에 표시되거나 특정 글자 수로 제한되는 경우를 본 적이 있을 것입니다.


이번 포스팅에서는 바로 그 기능, 즉 텍스트 필드에 입력하는 동안 글자 수를 화면에 표시하는 방법을 단계별로 알아보겠습니다.

구현 순서

1단계 — 프로젝트 생성

Xcode를 열고 → New Project → Single View Application을 선택한 뒤, 프로젝트 이름을 "TextFieldCount"로 지정합니다.

2단계 — UI 구성

Main.storyboard를 열고 아래 이미지처럼 TextField와 Label을 배치합니다. 그다음 각 요소에 대한 @IBOutlet을 생성하여 레이블은 lblCount, 텍스트 필드는 txtInputBox로 이름짓습니다.

iOS에서 텍스트 필드 입력 시 글자 수를 실시간으로 계산하는 방법

3단계 — 델리게이트 설정

ViewController.swift에서 UITextFieldDelegate 프로토콜을 채택하고, 텍스트 필드의 delegate를 self로 지정합니다.

class ViewController: UIViewController, UITextFieldDelegate {
txtInputBox.delegate = self

4단계 — 델리게이트 메서드 구현

델리게이트 메서드 shouldChangeCharactersIn을 구현하고, 그 안에 다음 코드를 작성합니다.

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
   if(textField == txtInputBox){
      let strLength = textField.text?.count ?? 0
      let lngthToAdd = string.count
      let lengthCount = strLength + lngthToAdd
      self.lblCount.text = "\(lengthCount)"
   }
   return true
}

이 메서드는 사용자가 텍스트를 입력하거나 삭제할 때마다 호출됩니다. 기존 텍스트의 길이에 새로 입력될 문자열의 길이를 더한 값을 레이블에 표시하는 방식입니다.

5단계 — 실행 및 확인

애플리케이션을 빌드하고 실행하면, 텍스트 필드에 타이핑할 때마다 글자 수가 실시간으로 업데이트되는 것을 확인할 수 있습니다.

전체 예제 코드

import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
   @IBOutlet var txtInputBox: UITextField!
   @IBOutlet var lblCount: UILabel!
   override func viewDidLoad() {
      super.viewDidLoad()
      txtInputBox.delegate = self
   }
   func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
      if(textField == txtInputBox){
         let strLength = textField.text?.count ?? 0
         let lngthToAdd = string.count
         let lengthCount = strLength + lngthToAdd
         self.lblCount.text = "\(lengthCount)"
      }
      return true
   }
}

실행 결과

iOS에서 텍스트 필드 입력 시 글자 수를 실시간으로 계산하는 방법


참고로 위 방식 외에도 editingChanged 이벤트를 활용하거나, Swift Combine의 퍼블리셔를 구독하는 방법 등으로도 동일한 기능을 구현할 수 있습니다. 상황과 프로젝트 구조에 맞는 방식을 선택하면 됩니다.