Подтвердить что ты не робот

Внешний вид iOS 6, содержащийся в нескольких классах

Im использует метод appearanceWhenContainedIn для определенных элементов пользовательского интерфейса, которые я хочу настроить в своем приложении iOS 6. Я обнаружил, что ни одна из моих настроек не применяется, если я пытаюсь предоставить более одного класса контейнера, например:

// Works neither for toolbar nor navbar items
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

// Works fine (but only for navbar items, obviously)
[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]

Официальные документы говорят, что параметр для этого метода может быть списком из нескольких классов с нулевым завершением, но в моем случае он никогда не работает так, как должен. Я что-то пропустил?

4b9b3361

Ответ 1

Из документов:

appearanceWhenContainedIn:

...

Прокси-сервер внешнего вида для получателя в заданном сдерживании Иерархия.

Фактически это означает, что список с нулевым завершением определяет не список классов контейнеров для UIBarButtonItem, а иерархию контейнеров сверху вниз, поэтому

[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIToolbar class], nil]

возвращает прокси-сервер внешнего вида для UIBarButtonItem, который находится внутри UINavigationBar, а UINavigationBar, в свою очередь, находится внутри UIToolbar.

или

[[UIBarButtonItem appearanceWhenContainedIn:[UIToolbar class],[ViewController class], nil] setTintColor:[UIColor redColor]];

установите цвет красного цвета для UIBarButtonItems, которые находятся в любом UIToolBar, которые находятся в классе ViewController.

Чтобы установить внешний вид для UINavigationBar и UIToolBar отдельно, вам понадобятся два отдельных вызова метода +appearanceWhenContainedIn: