Удалите кнопку очистки (серый х) справа от UISearchBar при нажатии кнопки отмены - PullRequest
23 голосов
/ 16 июня 2010

Хорошо, для начала мой вопрос, вот несколько скриншотов проблемы, уже решенной приложением Spotify:

Шаг 1 Spotify: Стандартный UISearchBar не в режиме редактирования.

Шаг 1 http://i49.tinypic.com/wbtpwi.png

Шаг 2 Spotify: UISearchBar теперь в режиме редактирования. Введено условие поиска. Кнопка Cancel скользит справа, и появляется кнопка очистки (серый x).

Шаг 2 http://i45.tinypic.com/161kbvp.png

Шаг 3 Spotify: Нажата кнопка отмены; клавиатура выдвигается, и панель поиска больше не находится в режиме редактирования. Поисковый термин остается, и серая кнопка теперь скрыта .

Шаг 3 http://i46.tinypic.com/20utv9v.png

В настоящее время при нажатии кнопки my отмены запускается следующий код:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    [searchBar resignFirstResponder];
    [searchBar setShowsCancelButton:NO animated:YES];
}

Что приводит к:

Мой шаг 3: Панель поиска теперь не в режиме редактирования. Кнопка отмены и клавиатура выдвинулись. Поисковый термин остается, но серый цвет также сохраняется.

Задача http://i46.tinypic.com/rlm4w5.png

Итак, мой вопрос таков: учитывая, что -resignFirstResponder-endEditing:, FYI) не скрывает серую кнопку x, когда в строку поиска введен текст, как это сделать скрыть это?

Еще раз спасибо, друзья.

Ответы [ 11 ]

0 голосов
/ 21 ноября 2014

Hers - это категория, которую я написал, которая делает это

Категория

@implementation UISearchBar (Additions)

- (void)setClearButtonMode:(UITextFieldViewMode)viewMode {
    UITextField *textField = [self findTextFieldInView:self];
    [textField setClearButtonMode:viewMode];
}

- (UITextField *)findTextFieldInView:(UIView *)view {

    for (UIView *subview in view.subviews) {

        if ([subview isKindOfClass:[UITextField class]] ||
            [subview.class isSubclassOfClass:[UITextField class]]) {

            return (UITextField *)subview;
        }

        UITextField *textField = [self findTextFieldInView:subview];

        if (textField) {
            return textField;
        }
    }

    return nil;
}

@end

Использование

[searchBar setClearButtonMode:UITextFieldViewModeWhileEditing];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...