UIToolbar tint на iOS 4 - PullRequest
       27

UIToolbar tint на iOS 4

13 голосов
/ 30 июня 2010

только что переключился на iOS 4 на моем iPhone 3GS, и некоторые из моих приложений сломались.

Одна проблема, с которой я столкнулся, это то, что у меня был UIToolbar с несколькими кнопками, окрашенными в розовый цвет, которые хорошо работали на 3.1.3 ОС.После обновления до iOS 4 панель инструментов все еще была окрашена, но оттенок на ней больше не действовал.Панель инструментов была розовой, в то время как кнопки были обычного синего цвета.

Поискал в сети, но не нашел ссылки на такие вещи.

Кто-нибудь знает, что сломалось в процессе?

Ответы [ 2 ]

23 голосов
/ 30 июня 2010

(должен быть откровенным здесь - я знал ответ до публикации, просто не знал, как загрузить эти данные в 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 ...

Приветствия!

10 голосов
/ 02 июля 2010

Что ж, это больше похоже на ошибку ОС, чем на функцию, так как навигационные панели меняют цвет своего элемента, когда вы устанавливаете их 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;
}

С уважением, Rula.

...