수색…


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를 반환하여 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow