我目前正在转动UIAppearance
修饰符*的复杂网络,并遇到了问题。
我对FlatUIKit的自定义UIBarButton
外观协议的使用导致MFMailComposerViewController
抱怨并停止工作。
因此,不是使用UIAppearance
的{{1}}方法来指定导致修改的类,有没有办法排除某些类,即“何时不包含”?
* 我说的是whenContainedIn
协议,用于预定义应用代理中的对象外观设置。
答案 0 :(得分:14)
您可以使用appearanceWhenContainedIn:
指定nil修改,这将提供默认外观:
[[UIBarButton appearance] setBarTintColor:[UIColor redColor]];
[[UIBarButton appearanceWhenContainedIn:[MFMailComposerViewController class], nil] setBarTintColor:nil];
从iOS 9 SDK开始,还有
[[UIBarButton appearance] setBarTintColor:[UIColor redColor]];
[[UIBarButton appearanceWhenContainedInInstancesOfClasses:@[[MFMailComposerViewController class]] setBarTintColor:nil];
可以像使用Swift-2一样使用:
UIBarButton.appearance().barTintColor = UIColor.redColor()
UIBarButton.appearanceWhenContainedInInstancesOfClasses([MFMailComposerViewController.self]).barTintColor = nil
答案 1 :(得分:0)
对我来说,我使用的是iOS 10中的这个,
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]];
答案 2 :(得分:0)
我的解决方案是创建应用程序中使用的所有容器视图控制器的自定义子类作为主UIWindow
子视图(窗口的根视图控制器或呈现的视图控制器),例如{{1} },UINavigationController
或UITabBarController
。
假设该应用仅使用UISplitViewController
。创建一个子类:
UINavigationController
然后在应用中的任何地方使用class CustomizedNavigationController: UINavigationController {}
代替普通CustomizedNavigationController
。
此外,不是为每个UINavigationController
指定外观,而是仅在包含在子类中时指定外观:
UIBarButton
由于UIBarButtonItem.appearance(whenContainedInInstancesOf:
[CustomizedNavigationController.self])
未使用子类,因此无法自定义。