UIToolbar оттенок на iOS 4
просто переключился на iOS 4 на моем iPhone 3GS, и некоторые из моих приложений сломались.
Одна из проблем, которые у меня были, это то, что у меня был UIToolbar с несколькими кнопками, окрашенными в розовый цвет, которые хорошо работали на ОС 3.1.3. После обновления до iOS 4 панель инструментов по-прежнему оставалась тонированной, но кнопки, которые она содержала, больше не влияли на оттенок. Панель инструментов была розовой, а кнопки были регулярными - синими.
Посмотрел на него в сети, но не нашел ссылки на такую вещь.
Кто-нибудь знает, что сломалось в процессе?
Ответы
Ответ 1
(должен быть откровенен здесь), я знал ответ перед публикацией, просто не знал, как загрузить эти данные в StackOverflow. Думал, что решение, которое я нашел, было ценным для других, поэтому мне хотелось опубликовать его здесь. здесь, поэтому, пожалуйста, не суровые критики:))
Итак, в итоге проблема возникла из-за 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 в Interface Builder, вы можете изменить его там, и это относится и к кнопкам).
Я думаю, что оттенок обновил все кнопки до iOS 4, в то время как в iOS 4 это не так, и при добавлении кнопок они проверяют существующий оттенок. Но это всего лишь предположение. Решение работает так или иначе..
Надеюсь, это поможет кому-то, и что я не нарушал никаких священных правил SO...
Ура!
Ответ 2
Ну, это больше похоже на ошибку ОС, чем на функцию, поскольку панели навигации меняют свой цвет элемента, когда вы устанавливаете tintColor.
Мы обнаружили, что если вы измените стиль элемента, он обновит их цвет как побочный эффект. В нашем случае работала. Исходные кнопки ограничены, поэтому мы меняем их на равные и снова устанавливаем для них. Вы можете сделать более сложный и общий код, который сохраняет текущий стиль, устанавливает другой и затем переключается обратно. Я просто ленив, чтобы сделать это.: D В любом случае, вы поняли идею.
toolbar.tintColor = //<some dynamically obtained UIColor>
// Workaround to properly set the UIBarButtonItem tint color in iOS 4
for (UIBarButtonItem * item in toolbar.items)
{
item.style = UIBarButtonItemStylePlain;
item.style = UIBarButtonItemStyleBordered;
}
С уважением,
Rula.