我目前正在旋转一个复杂的UIAppearance
修饰符网络*,并且遇到了一个问题。
我对 FlatUIKit 的自定义UIBarButton
外观协议的使用导致MFMailComposerViewController
抱怨并停止工作。
因此,不是使用UIAppearance
'swhenContainedIn
方法来指定导致修改发生的类,有没有办法排除某些类,即“当不包含在中时”?
*我说的UIAppearance
是用于在应用程序的委托中预定义对象外观设置的协议。
我目前正在旋转一个复杂的UIAppearance
修饰符网络*,并且遇到了一个问题。
我对 FlatUIKit 的自定义UIBarButton
外观协议的使用导致MFMailComposerViewController
抱怨并停止工作。
因此,不是使用UIAppearance
'swhenContainedIn
方法来指定导致修改发生的类,有没有办法排除某些类,即“当不包含在中时”?
*我说的UIAppearance
是用于在应用程序的委托中预定义对象外观设置的协议。
您可以使用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
对我来说,我使用了适用于 iOS 10 的这个,
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]];
我的解决方案是为应用程序中使用的所有容器视图控制器创建一个自定义子类,作为UIWindow
主子视图(窗口的根视图控制器或呈现的视图控制器),例如UINavigationController
,UITabBarController
或UISplitViewController
。
假设该应用程序仅使用UINavigationController
. 创建一个子类:
class CustomizedNavigationController: UINavigationController {}
然后在应用程序的任何地方使用CustomizedNavigationController
代替普通UINavigationController
的。
此外,不是为每个UIBarButton
指定外观,而是仅在包含在子类中时指定外观:
UIBarButtonItem.appearance(whenContainedInInstancesOf:
[CustomizedNavigationController.self])
因为MFMailComposerViewController
没有使用子类,所以不会被定制。