[iOS] UITextField BackSpace 값 구하기 (Objective C, Swift)

기존에 글자 수를 제한 한다던지, 최소 입력 제한값이 있다던지 할 때, UITextField나 UITextView의 Delegate를 통하여 제한 하는 코드를 사용하곤 하는데,

기존에 BackSpace 값이 Objective C와 Swift 가 코드값이 틀려져서 참고하고자 글 남기니다.

cString 값을 통한 BackSpace Int 값
Objective C : -8   [String 값 "\b"]
Swift : -92   [String값 "\\b"]

Swift 에서 String값 "\" 만 사용할 수 가 없어서 "\\"로 표현하는데, 값이 변한다는것에 대해 맘에 들지 않아 개선건 추가로 코드 적어놓습니다.

string.isEmpty 값이 BackSpace 구분 가능합니다.

아래 코드 참고


Objective C
1
2
3
4
5
6
7
8
9
10
#pragma mark - UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    const char *_char = [string cStringUsingEncoding:NSUTF8StringEncoding];
    int isBackSpace = strcmp(_char, "\b");
    // 백스페이스 값 -8
    if (isBackSpace == -8) {
        NSLog(@"Backspace was pressed (-8)");
    }
    return YES;
}
cs


Swift
1
2
3
4
5
6
7
8
9
10
11
12
13
// MARK: - UITextFieldDelegate
extension ChatSideMenuViewController:UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString stringString-> Bool {
        if let char = string.cString(usingString.Encoding.utf8) {
            let isBackSpace = strcmp(char"\\b"// \b 인식인 되지 않음. (Swift 에서 \문자열 출력시 "\"앞에 붙여야함.)
            // 백스페이스 값 -92
            if (isBackSpace == -92) { // 기존의 차이점이 Objective C 에서는 -8 값이였음.
                print("Backspace was pressed (-92)")
            }
        }
        return true
    }
}
cs


Swift (개선건)
1
2
3
4
5
6
7
8
9
10
// MARK: - UITextFieldDelegate
extension ChatSideMenuViewController:UITextFieldDelegate {
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String-> Bool {
        // isEmpty 인 경우 백스페이스 값임.
        if string.isEmpty {
           print("Backspce isEmpty")
        }        
        return true
    }
}
cs

댓글