Как сделать красивую кнопку "Отмена"
Только что попалась задачка, которая не решалась обычными методами, даже достаточно извращенными. Есть UISearchBar, там есть спец-поле для показа/скрывания кнопки «Отмена», есть даже спец-метод, который это делает с анимацией. «То, что нужно» — воскликнул я, и послал правильное сообщение…
Хорошо, сказала система, но мы кнопку тебе задизейблим, если курсор не в поле ввода. «А?» — спросил я. Как так? Надо ее енейблить взад!
Гугление номер раз привело к подсказке. UISearchBar не работает по-человечески без UISearchDisplayController. Ок, контроллер уже есть, перекорячиваем его быстренько в нужный. Сделали. Ура, оно работает! Но теперь некрасиво. Почему?
Дело в том, что в программе у меня красивый серый навигейшн-бар. А если я меняю tintColor для бара поиска, то и кнопка тоже его меняет и получается белый текст на сером фоне, что и не смотрится, и вообще бе.
Пошел я гуглить номер два. Долго гуглил, непросто это оказалось. Но вдруг случилось чудо! Я набрел на страничку Create a good looking gray UISearchBar разработчика с непроизносимым и неискабельным на сайте названием. Где он пишет, что для того, чтобы сделать серый бар с красивой темной кнопкой, нужно (следите за руками):
- Сделать поисковому бару стиль Default и
- прописать tintColor с прозрачностью 0 (!).
Я сделал это в Interface Builder'е, уверен, что можно и руками. Чудеса! Но это работает! Спасибо непонятному товарищу и гуглу, как водится.
Тут все дело в том, что UIsearchBar работает вместе с UISearchDisplayController, который и меняет цвет/стиль сёрч бара.
А вот если пытаться сделать тоже самое, но без UISearchDisplayController, то ничего не выходит :(
Приходится делать так:
UISearchDisplayController *sdc = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:nil];
[sdc release];
И только тогда цвет у searchBar становится нормальный. Как это сделать по-человечески я не понимаю.