Удалите ясную кнопку (серый x) направо от UISearchBar когда коснувшаяся кнопка отмены

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

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

Step 1

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

Step 2

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

Step 3

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

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

Который приводит к:

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

Problem

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

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

23
задан Glorfindel 29 July 2019 в 21:06
поделиться

1 ответ

Проблема в том, что UISearchBar не раскрывает свое текстовое поле, а управляет свойствами самого текстового поля. Иногда значения свойств не совпадают с тем, что вы хотите.

Например, в моем собственном приложении я хотел, чтобы стиль клавиатуры для моей панели поиска использовал стиль прозрачного предупреждения.

Моим решением было пройтись по вложенным окнам панели поиска, пока не найдете текстовое поле. Затем нужно установить свойство clearButtonMode, используя в качестве параметра что-то вроде UITextFieldViewModeWhileEditing.

Это должно сделать так, чтобы кнопка очистки отображалась только во время редактирования текстового поля.

Вы хотите сделать это на viewDidLoad или как-то еще раньше, чтобы параметр был установлен до того, как вы начнете его использовать (но после инициализации строки поиска.

for (UIView *subview in searchBar.subviews)
{
    if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
    {
        [(UITextField *)subview setClearButtonMode:UITextFieldViewModeWhileEditing];
    }
}
29
ответ дан 29 November 2019 в 01:27
поделиться