2014-12-06 4 views
2

Я реализую этот код, но backspace не работает, пока я не нажму кнопку удаления в UITextfield Я хочу сделать с удалением Backspace.UItextfield shouldChangeCharactersInRange метод backSpace не работает

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:_demo_str]; 
    for (int i = 0; i < [string length]; i++) { 
     unichar c = [string characterAtIndex:i]; 
     if ([myCharSet characterIsMember:c]) { 
      return YES; 
     } 
    } 
    return NO; 
    } 
+2

Когда клавиша обратного пробела используется, строка '' будет пустой строкой, поэтому вы возвращаете 'НЕТ', что означает, что изменение будет проигнорировано, так что ничего не происходит. – rmaddy

+0

@rmaddy, так как я могу это сделать? –

+0

Возвращает 'YES', если' string' пуст, поэтому удаление обрабатывается. – rmaddy

ответ

0

Попробуйте этот код. это работает для меня

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 

    NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:_demo_str]; 
    for (int i = 0; i < [string length]; i++) { 
    unichar c = [string characterAtIndex:i]; 
    if ([myCharSet characterIsMember:c]) { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
    } 
    return YES; 
} 
+1

спасибо, что это работает для меня –

-1
use this code 

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString: _demo_str]; 
if(range.length > 0){ 

    if(!string || [string isEqualToString:@""] || string.length == 0){ 
      return YES; 
    } 
    else{ 
     for (int i = 0; i < [string length]; i++) { 
      unichar c = [string characterAtIndex:i]; 
      if ([myCharSet characterIsMember:c]) { 
       return YES; 
      } 
     } 
    } 

    return NO; 
} 
else{ 
    for (int i = 0; i < [string length]; i++) { 
     unichar c = [string characterAtIndex:i]; 
     if ([myCharSet characterIsMember:c]) { 
      return YES; 
     } 
    } 
     return NO; 
} 
+0

'range.length' будет' 1' в условиях, отличных от нажатия клавиши backspace. При нажатии клавиши backspace длина может отличаться от «1». Этот ответ не будет работать. – rmaddy

+0

Можете ли вы объяснить мне одно условие, когда оно не работает. –

+0

Я могу дать вам двоих. 1) Выделите один символ в текстовом поле и коснитесь буквы. 'range.length' -' 1', но backspace не был использован. 2) Выделите два или более символа в текстовом поле и коснитесь backspace. 'range.length' не будет' 1', но обратное пространство было использовано. – rmaddy

Смежные вопросы