UIAppearance ", если не содержится в"
В настоящее время я вращаю сложную сеть модификаторов UIAppearance
* и сталкиваюсь с проблемой.
Мое использование пользовательского протокола отображения UIBarButton
FlatUIKit вызывает MFMailComposerViewController
жалобы и прекращение работы.
Следовательно, вместо использования метода UIAppearance
whenContainedIn
для указания классов, вызывающих модификацию, существует ли способ исключить определенные классы, то есть "когда он не содержится в"?
* Я говорю о протоколе UIAppearance
, который используется для предопределения параметров внешнего вида объекта в делегате приложения.
Ответы
Ответ 1
Вы можете использовать appearanceWhenContainedIn:
для указания nil-модификации, которая даст внешний вид по умолчанию:
[[UIBarButton appearance] setBarTintColor:[UIColor redColor]];
[[UIBarButton appearanceWhenContainedIn:[MFMailComposerViewController class], nil] setBarTintColor:nil];
Как и в SDK IOS 9, есть также
[[UIBarButton appearance] setBarTintColor:[UIColor redColor]];
[[UIBarButton appearanceWhenContainedInInstancesOfClasses:@[[MFMailComposerViewController class]] setBarTintColor:nil];
Что можно использовать Swift-2 так:
UIBarButton.appearance().barTintColor = UIColor.redColor()
UIBarButton.appearanceWhenContainedInInstancesOfClasses([MFMailComposerViewController.self]).barTintColor = nil
Ответ 2
Для меня я использовал этот, который работает в iOS 10,
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]];
Ответ 3
Мое решение заключается в создании пользовательского подкласса всех контроллеров представления контейнеров, которые используются в приложении, в качестве основного UIWindow
subviews (контроллера корневого окна Windows или представленных контроллеров представления), таких как UINavigationController
, UITabBarController
или UISplitViewController
.
Скажем, приложение использует только UINavigationController
. Создайте подкласс:
class CustomizedNavigationController: UINavigationController {}
Затем используйте CustomizedNavigationController
вместо обычного UINavigationController
везде в приложении.
Кроме того, вместо указания внешнего вида для каждого UIBarButton
, укажите внешний вид только в том случае, если он содержится в подклассе:
UIBarButtonItem.appearance(whenContainedInInstancesOf:
[CustomizedNavigationController.self])
Поскольку MFMailComposerViewController
не использует подкласс, он не будет настроен.