2013-10-16 1 views
12

В настоящее время я вращаю сложную сеть модификаторов UIAppearance и сталкиваюсь с проблемой.UIAppearance's «когда не содержится в»

Мое использование специального протокола FlatUIKit UIBarButton вызывает сообщение MFMailComposerViewController, чтобы жаловаться и прекращать работу.

Следовательно, вместо того, чтобы использовать метод UIAppearancewhenContainedIn, чтобы указать классы, вызывающие модификацию, существует ли способ исключить определенные классы, то есть «когда они не содержатся»?

* Я говорю о протоколе UIAppearance, который используется для предопределения параметров внешнего вида объекта в делегате приложения.

ответ

14

Вы можете использовать appearanceWhenContainedIn: указать нулевую модификацию, которая даст внешний вид по умолчанию:

[[UIBarButton appearance] setBarTintColor:[UIColor redColor]]; 
[[UIBarButton appearanceWhenContainedIn:[MFMailComposerViewController class], nil] setBarTintColor:nil]; 

В ИО 9 SDK, есть также

[[UIBarButton appearance] setBarTintColor:[UIColor redColor]]; 
[[UIBarButton appearanceWhenContainedInInstancesOfClasses:@[[MFMailComposerViewController class]] setBarTintColor:nil]; 

который может быть использован Свифт 2 так:

UIBarButton.appearance().barTintColor = UIColor.redColor() 
UIBarButton.appearanceWhenContainedInInstancesOfClasses([MFMailComposerViewController.self]).barTintColor = nil 
0

Для меня я использовал этот ч работает прошивка 10,

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]]; 
0

Мое решения создать пользовательский подкласс всех контроллеров отображения контейнера, которые используются в приложении в качестве основных UIWindow подвидов (контроллера представления корневого окна или представленных контроллеров зрения), таких как UINavigationController, UITabBarController или UISplitViewController.

Предположим, что приложение использует только UINavigationController. Создайте подкласс:

class CustomizedNavigationController: UINavigationController {} 

Затем используйте CustomizedNavigationController вместо простого UINavigationController везде в приложении.

Кроме того, вместо того, чтобы указать внешний вид для каждого UIBarButton, указать внешний вид только тогда, когда содержащийся в подклассе:

UIBarButtonItem.appearance(whenContainedInInstancesOf: 
          [CustomizedNavigationController.self]) 

MFMailComposerViewController Поскольку не использует подкласс, он не будет подгонять.

Смежные вопросы