13

我目前正在旋转一个复杂的UIAppearance修饰符网络*,并且遇到了一个问题。

我对 FlatUIKit 的自定义UIBarButton外观协议的使用导致MFMailComposerViewController抱怨并停止工作。

因此,不是使用UIAppearance'swhenContainedIn方法来指定导致修改发生的类,有没有办法排除某些类,即“当不包含在中时”?

*我说的UIAppearance是用于在应用程序的委托中预定义对象外观设置的协议。

4

3 回答 3

15

您可以使用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
于 2013-10-16T16:33:35.673 回答
0

对我来说,我使用了适用于 iOS 10 的这个,

[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor darkGrayColor]];
于 2016-12-14T14:13:30.583 回答
0

我的解决方案是为应用程序中使用的所有容器视图控制器创建一个自定义子类,作为UIWindow主子视图(窗口的根视图控制器或呈现的视图控制器),例如UINavigationControllerUITabBarControllerUISplitViewController

假设该应用程序仅使用UINavigationController. 创建一个子类:

class CustomizedNavigationController: UINavigationController {}

然后在应用程序的任何地方使用CustomizedNavigationController代替普通UINavigationController的。

此外,不是为每个UIBarButton指定外观,而是仅在包含在子类中时指定外观:

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

因为MFMailComposerViewController没有使用子类,所以不会被定制。

于 2017-06-09T10:15:55.333 回答