기존에 글자 수를 제한 한다던지, 최소 입력 제한값이 있다던지 할 때, 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
Swift
Swift (개선건)
기존에 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 string: String) -> Bool {
if let char = string.cString(using: String.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 |
댓글
댓글 쓰기