UIToolbar tint на iOS 4
Только что переключился на iOS 4 на моем iPhone 3GS, и некоторые из моих приложений сломались.
У меня была проблема с UIToolbar с несколькими кнопками, окрашенными в розовый цвет, которые хорошо работали на ОС 3.1.3. После обновления до iOS 4 панель инструментов все еще была окрашена, но оттенок на ней больше не действовал. Панель инструментов была розовой, а кнопки были обычными синими.
Поискал в сети, но не нашел ссылки на такую вещь.
Кто-нибудь знает, что сломалось в процессе?
2 ответа
(должен быть откровенным здесь - я знал ответ до публикации, просто не знал, как загрузить эти данные в Stackru. Думал, что найденное мной решение было полезным для других, поэтому хотел опубликовать его здесь. Я новичок здесь, поэтому пожалуйста, нет резких критиков:))
Таким образом, в конечном итоге проблема возникла, AFAICT, в изменении поведения в ОС.
Как указано, код оттенка работал до обновления и был написан так:
// Toolbar content
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE
[toolbar setItems:items];
// Add tint
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5];
То, что мне нужно было сделать, было просто изменить порядок вещей:
// Add tint
toolbar.tintColor = [UIColor colorWithRed:0.83 green:0.43 blue:0.57 alpha:0.5];
// Toolbar content
NSArray *items=[NSArray arrayWithObjects: ... ]; // PSEUDO CODE HERE
[toolbar setItems:items];
(Если вы создали UIToolbar в Интерфейсном Разработчике, вы можете изменить его оттенок там, и это также относится к кнопкам).
Я думаю, что оттенок обновил все кнопки до iOS 4, в то время как в iOS 4 это не так, и при добавлении кнопок они проверяют существующий оттенок. Но это всего лишь предположение. Решение работает в любом случае..
Надеюсь, это кому-нибудь поможет, и что я не нарушал никаких священных ТАК...
Ура!
Что ж, это больше похоже на ошибку ОС, чем на функцию, так как навигационные панели меняют цвет своих элементов, когда вы устанавливаете их tintColor.
Мы обнаружили, что если вы измените стиль элемента, он обновит их цвет в качестве побочного эффекта. В нашем случае сработало следующее. Исходные кнопки ограничены, поэтому мы меняем их на обычные и снова устанавливаем их. Вы можете сделать более сложный и общий код, который сохраняет текущий стиль, устанавливает другой и затем переключается обратно. Мне просто лень это делать.:D В любом случае, вы поняли идею.
toolbar.tintColor = //<some dynamically obtained UIColor>
// Workaround to properly set the UIBarButtonItem's tint color in iOS 4
for (UIBarButtonItem * item in toolbar.items)
{
item.style = UIBarButtonItemStylePlain;
item.style = UIBarButtonItemStyleBordered;
}
С уважением, Рула.