2013-09-25 4 views
0

Я новичок в Objective C, у меня есть панель поиска в моем столеView. Мне не нужно ограничивать ввод в текстовом поле searchBar, например, мне не нужно вводить более 20 символов, как я могу это сделать?Как ограничить ввод в UISearchBar?

в

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

я стараюсь писать как

л
searchBar.text.lenght == 20; 

, но это не имеет смысла

как я могу сделать это? или, может быть, проще выключить клавиатуру, когда длина> 20. Спасибо.

ответ

6

Вы можете использовать shouldChangeCharactersInRange:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    return ([textField.text length] + [string length] - range.length > 20) ? NO : YES; 
} 

Edit: Sorry. Для UISearchBar вы должны использовать

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    return ([searchBar.text length] + [text length] - range.length > 20) ? NO : YES; 
} 

Edit: См комментарий ниже

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { 
    return ([searchBar.text length] + [text length] - range.length <= 20); 
} 
+0

Отлично! Большое спасибо!) –

+0

ПоискBarButtonClicked-Method не вызвал бы, если бы я проверил это и достиг максимального количества символов. Это работает лучше для меня: http://stackoverflow.com/a/7317394/701900 – matzino

+0

просто стилистическая вещь: НЕТ: ДА немного уродливая. почему бы не проверить <= 20 и отказаться? НЕТ: ДА –

2

Расширение на другой ответ, так как вы новичок в Objective-C

1.You будет необходимо реализовать протокол UISearchBarDelegate внутри вашего контроллера просмотра.

@interface ViewController : UIViewController <UISearchBarDelegate> 

2. Вам нужно будет назначить делегата

searchBar.delegate = self 

3. Реализовать делегат обратного вызова, как указано в другом посте

Если вы хотите, чтобы скрыть клавиатуру, если вы идете на 20 символов, вы можете сделать это в той же функции делегата, позвонив по телефону

[searchBar resignFirstResponder]; 
+0

сделано, спасибо :) не может ответить на ваш вопрос, низкая репутация ... –

0

Для будущих re ader, in Swift 4:

func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let totalCharacters = (searchBar.text?.appending(text).count ?? 0) - range.length 
    return totalCharacters <= 20 
} 
Смежные вопросы