Backspace не работает при реализации shouldChangeCharactersInRange метод - iPhone Dev
Проблема... У меня есть строка допустимых символов "0123456789." Как я также разрешаю backspace с клавиатуры... когда я реализую код снизу... ключ backspace больше не работает... Как я могу это исправить?
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}
Ответы
Ответ 1
- (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
if (range.length == 1){
return YES;
}else{
return ([string stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}
}
Ответ 2
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if ([string length] == 0)
return YES;
NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
string = [[string componentsSeparatedByCharactersInSet:nonNumberSet] componentsJoinedByString:@""];
textField.text = [textField.text stringByReplacingCharactersInRange:range withString:string];
return NO;
}
Это должно работать правильно с удалением/вырезанием нескольких символов одновременно, а также при вставке. Исправления приветствуются. Единственная известная проблема заключается в том, что при редактировании в середине текстового поля курсор отправляется в конец (потому что он возвращает NO
) - я думаю, вы должны используйте UITextView
, чтобы исправить это.
Ответ 3
NSCharacterSet *theNonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789."] invertedSet];
if (range.length == 1){
return YES;
}else if(textField.text.length < ZipcodeTextLength)
{
return ([string stringByTrimmingCharactersInSet:theNonNumberSet].length > 0);
}
else
return NO;
Это позволит Numbers и Backspace, а также вы можете ограничить длину текста.
Ответ 4
Это одна из моих реализаций. Возможно, это работает для вас.
-(BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
for(UIView *view in _chooseUsernameDialog.subviews) {
if([view isKindOfClass:[UIButton class]]) {
int realLength;
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
// is backspace
realLength = [textField.text length] - 1 ;
}
else
{
realLength = [textField.text length] + 1;
}
NSLog(@"%d", realLength );
if(realLength < 4)
{
//too short
}
else{
//long enough
}
}
}
return !([[textField text] length] + (string.length - range.length) > 13);
}