iOS
UITextField 델리게이트
수색…
UITextField - 텍스트 필드를 특정 문자로 제한합니다.
텍스트 필드의 사용자 입력 유효성 검사를 수행하려면 다음 코드 단편을 사용하십시오.
// MARK: - UITextFieldDelegate
let allowedCharacters = CharacterSet(charactersIn:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvxyz").inverted
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
let components = string.components(separatedBy: allowedCharacters)
let filtered = components.joined(separator: "")
if string == filtered {
return true
} else {
return false
}
}
목표 -C
#define ACCEPTABLE_CHARACTERS @"0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:ACCEPTABLE_CHARACTERS] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
또한 apple에서 제공하는 문자 집합을 사용하여 유효성 검사를 수행 할 수 있습니다.
https://developer.apple.com/reference/foundation/nscharacterset 을 확인하십시오.
let allowedCharacters = CharacterSet.alphanumerics.inverted
let allowedCharacters = CharacterSet.capitalizedLetters.inverted
다음 태그 찾기 및 키보드 관리
텍스트 필드는 다른 대리자 메서드를 호출합니다 (대리자가 설정된 경우에만). textfield가 호출하는 대리자 메서드 중 하나는 * - (BOOL) textFieldShouldReturn : (UITextField ) textField
이 메소드는 사용자가 return 버튼을 누를 때마다 호출됩니다.이 메소드를 사용하여 모든 사용자 정의 동작을 구현할 수 있습니다.
예를 들어,
아래 예제에서 다음 응답자는 태그를 기준으로 검색하고 키보드를 관리합니다. 여기서 20은 상수이고, 텍스트 필드에 지정된 태그는 50,70,90 등입니다.
여기에 새로운 텍스트 필드 객체를 응답자로 찾으면 현재 텍스트 필드를 새 응답자로 만들고 이에 따라 키보드를 엽니 다.
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
NSInteger nextTag = textField.tag+20;
// Try to find next responder
UIResponder *nextResponder = [textField.superview viewWithTag:nextTag];
if (nextResponder)
{
// Found next responder, so set it.
[nextResponder becomeFirstResponder];
}
else
{
// Not found, so remove keyboard.
[textField resignFirstResponder];
}
return YES;
}
사용자가 텍스트 필드와 상호 작용을 시작하거나 종료했을 때의 동작
스위프트 3.1 :
첫 번째 예에서는 글쓰기 동안 텍스트 필드와 상호 작용하는 사용자를 차단하는 방법을 볼 수 있습니다. 마찬가지로 UITextFieldDelegate 에는 사용자가 TextField와의 상호 작용을 시작하고 종료 할 때 호출되는 메서드가 있습니다.
이러한 메서드에 액세스하려면 UITextFieldDelegate 프로토콜을 준수해야하며 알림을 받으려는 각 텍스트 필드에 대해 부모 클래스를 대리자로 할당해야합니다.
class SomeClass: UITextFieldDelegate {
@IBOutlet var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
}
이제 모든 UITextFieldDelegate 메서드를 구현할 수 있습니다.
사용자가 텍스트 필드를 편집하기 시작할 때 알림을 받으려면 textFieldDidBeginEditing (_ :) 메소드를 다음과 같이 구현할 수 있습니다.
func textFieldDidBeginEditing(_ textField: UITextField) {
// now you can perform some action
// if you have multiple textfields in a class,
// you can compare them here to handle each one separately
if textField == emailTextField {
// e.g. validate email
}
else if textField == passwordTextField {
// e.g. validate password
}
}
마찬가지로 사용자가 텍스트 필드와의 상호 작용을 종료했는지 여부를 알리는 것과 마찬가지로 textFieldDidEndEditing (_ :) 메소드를 다음과 같이 사용할 수 있습니다.
func textFieldDidEndEditing(_ textField: UITextField) {
// now you can perform some action
// if you have multiple textfields in a class,
// you can compare them here to handle each one separately
if textField == emailTextField {
// e.g. validate email
}
else if textField == passwordTextField {
// e.g. validate password
}
}
TextField가 편집을 시작 / 끝해야하는지 여부를 제어하려는 경우 textFieldShouldBeginEditing (_ :) 및 textFieldShouldEndEditing (_ :) 메서드는 필요한 논리에 따라 true / false를 반환하여 사용할 수 있습니다.