Право, для начала моего вопроса, вот является некоторым screenies проблемы, уже решенной приложением Spotify:
Шаг 1 Spotify: Стандарт UISearchBar не в режиме редактирования.
Шаг 2 Spotify: UISearchBar теперь в режиме редактирования. Критерий поиска вводится. Кнопка отмены задвигает справа, и ясная кнопка (серый x) появляется.
Шаг 3 Spotify: Кнопка отмены нажимается; клавиатура выскальзывает, и панель поиска больше не находится в режиме редактирования. Критерий поиска остается, и серая x кнопка теперь скрыта.
В настоящее время следующий код исчерпывает, когда моя кнопка отмены нажимается:
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
[searchBar resignFirstResponder];
[searchBar setShowsCancelButton:NO animated:YES];
}
Который приводит к:
Мой Шаг 3: Панель поиска теперь не в режиме редактирования. Кнопка отмены и клавиатура выскользнули. Критерий поиска остается, но серый x - также.
Так, мой вопрос - это: учитывая, что -resignFirstResponder
(и -endEditing:
, К вашему сведению), не скрывает серую x кнопку, когда панели поиска ввели в текст она, как каждый скрывает ее?
Еще раз спасибо, друзья.
Проблема в том, что UISearchBar не раскрывает свое текстовое поле, а управляет свойствами самого текстового поля. Иногда значения свойств не совпадают с тем, что вы хотите.
Например, в моем собственном приложении я хотел, чтобы стиль клавиатуры для моей панели поиска использовал стиль прозрачного предупреждения.
Моим решением было пройтись по вложенным окнам панели поиска, пока не найдете текстовое поле. Затем нужно установить свойство clearButtonMode
, используя в качестве параметра что-то вроде UITextFieldViewModeWhileEditing
.
Это должно сделать так, чтобы кнопка очистки отображалась только во время редактирования текстового поля.
Вы хотите сделать это на viewDidLoad
или как-то еще раньше, чтобы параметр был установлен до того, как вы начнете его использовать (но после инициализации строки поиска.
for (UIView *subview in searchBar.subviews)
{
if ([subview conformsToProtocol:@protocol(UITextInputTraits)])
{
[(UITextField *)subview setClearButtonMode:UITextFieldViewModeWhileEditing];
}
}