2014-01-22 2 views
0

Почему мое приложение держать сбой, когда я добавить это в моем AppDelegate ?:Глобальные стили в AppDelegate?

// Change Global Style of the UINavigationBar 
[[UINavigationBar appearance] setBarTintColor:[UIColor colorWithRed:12.0/255.0 green:109.0/255.0 blue:216.0/255.0 alpha:1.0]]; 
[[UINavigationBar appearance] setTranslucent:NO]; 
[[UINavigationBar appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:NSForegroundColorAttributeName]]; 
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor], NSForegroundColorAttributeName,nil] forState:UIControlStateNormal]; 
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; 

// Chnage Global TabBar Color w/ Options 
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor orangeColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal]; 
[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:12.0/255.0 green:109.0/255.0 blue:216.0/255.0 alpha:1.0]]; 
[[UITabBar appearance] setTranslucent:NO]; 

я должен делать это в каждом VC вместо AppDelegate?

Все компилируется, но приложение вылетает с этой ошибкой в ​​консоли:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Illegal property type, c for appearance setter, _installAppearanceSwizzlesForSetter: 
+0

Добавьте контрольную точку исключения и сообщите нам, какая строка вызывает сбой. – Fogmeister

ответ

1

UIAppearance метода ([SomeClass appearance]) вступила в силу для всех элементов управления этого типа. Вам нужно только объявить их один раз, а затем все созданные новые элементы управления будут использовать этот стиль.

Однако не все свойства могут быть использованы с UIAppearance. Прозрачность - одна из них, и поэтому призывы к setTranslucent: являются причиной вашего сбоя. Вы сами это видите, если посмотрите на заголовок UINavigationBar - translucent не содержит аннотации UI_APPEARANCE_SELECTOR. Вы должны будете установить свою прозрачность в своих конкретных случаях панели навигации.

+0

Как я все еще буду делать это в AppDelegate? –

+0

Это зависит от того, как создаются ваши представления/viewcontrollers. Если, например, вы создаете навигационный контроллер в своем AppDelegate, вы можете просто установить его прозрачность: '[navigationController.navigationBar setTranslucent: YES]'. –

0

Похоже, вы используете новейший Xcode & iOS (5 & 7), но вы пытаетесь запустить его на симуляторе с более низкой версией iOS, то есть 6.x.

Основная причина вашей аварии может быть setBarTintColor, который не существует в IOS версии ранее 7.0

Я надеюсь, что помогает.

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