iOS 앱을 개발하다 보면 텍스트 필드에 숫자만 입력받아야 하는 경우가 자주 발생합니다. 예를 들어 전화번호, 나이, 금액 등을 입력받는 화면에서는 사용자가 실수로 문자를 입력하지 못하도록 제한하는 것이 좋습니다. 이번 글에서는 Swift의 UITextField를 숫자 전용 입력 필드로 만드는 두 가지 방법을 소개합니다.
방법 1: 스토리보드에서 키보드 유형 변경하기
가장 간단한 방법은 스토리보드(Storyboard)에서 키보드 유형을 변경하는 것입니다. 다만 이 방법은 키보드 자체가 숫자 패드로 바뀔 뿐, 외부 키보드 연결이나 복사·붙여넣기 등으로 문자가 입력될 수 있다는 점은 참고하세요.
- 숫자 입력으로 제한하고 싶은 텍스트 필드를 선택합니다.
- 오른쪽 패널에서 속성 인스펙터(Attribute Inspector)를 엽니다.
- Keyboard Type 항목에서 Number Pad를 선택합니다.
이렇게 설정하면 해당 텍스트 필드를 탭했을 때 숫자 패드 키보드가 나타납니다.
방법 2: 코드로 직접 입력값 검증하기
더 확실한 방법은 UITextFieldDelegate를 활용해 입력되는 문자를 코드 레벨에서 검증하는 것입니다. 단계별로 살펴보겠습니다.
- 제한할 텍스트 필드를 선택합니다.
- 뷰 컨트롤러에
@IBOutlet아울렛을 생성합니다. - 뷰 컨트롤러가 UITextFieldDelegate 프로토콜을 따르도록 선언합니다.
- 텍스트 필드의 delegate를 뷰 컨트롤러(self)로 지정합니다.
- 아래의 델리게이트 메서드를 구현합니다.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let _ = string.rangeOfCharacter(from: NSCharacterSet.decimalDigits) {
return true
} else {
return false
}
}
전체 예제 클래스는 다음과 같습니다.
import UIKit
class ViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var tf: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
tf.delegate = self
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if let _ = string.rangeOfCharacter(from: NSCharacterSet.decimalDigits) {
return true
} else {
return false
}
}
}
추가 팁: 더 견고한 검증 로직
위 코드는 새로 입력된 문자열에 숫자가 포함되어 있는지만 확인합니다. 좀 더 엄격하게 입력된 모든 문자가 숫자인지 확인하려면 아래처럼 작성할 수 있습니다.
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let allowed = CharacterSet.decimalDigits
return string.rangeOfCharacter(from: allowed.inverted) == nil
}
이 방식은 붙여넣기 등으로 여러 글자가 한 번에 입력될 때도 안전하게 동작합니다.
마무리
이 두 가지 방법을 조합하면 가장 완벽한 결과를 얻을 수 있습니다. 즉, 키보드 유형을 Number Pad로 설정해 편의성을 높이고, 동시에 델리게이트 메서드로 입력값을 검증하여 어떤 경로로든 문자가 입력되지 않도록 하는 것입니다. 이렇게 하면 오직 숫자만 입력 가능한 텍스트 필드를 완성할 수 있습니다.