swift中此方法在iOS9開(kāi)始才能用,為了解決這個(gè)問(wèn)題需要用oc寫個(gè)分類,但是考慮到NSObject的子類比如UITabBarItem,所以寫基于NSObject的分類
@available(iOS 9.0, *)
public static func appearanceWhenContainedInInstancesOfClasses(containerTypes: [AnyObject.Type]) -> Self
使用的范例--獲取UITabBarItem
if #available(iOS 9.0, *) {
item = UITabBarItem.appearanceWhenContainedInInstancesOfClasses([LETabBarController.self])
} else {
// Fallback on earlier versions
item = UITabBarItem.my_appearanceWhenContainedIn(LETabBarController.self)
}
分類文件
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@interface NSObject (UIAppearance_Swift) <UIAppearance>
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass;
//強(qiáng)制旋轉(zhuǎn)屏幕
+ (void)orientationToPortrait:(UIInterfaceOrientation)orientation;
@end
#import "NSObject+UIAppearance_Swift.h"
@implementation NSObject (UIAppearance_Swift)
+ (instancetype)my_appearanceWhenContainedIn:(Class<UIAppearanceContainer>)containerClass {
return [self appearanceWhenContainedIn:containerClass, nil];
}
//強(qiáng)制旋轉(zhuǎn)屏幕
+ (void)orientationToPortrait:(UIInterfaceOrientation)orientation
{
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = orientation;
[invocation setArgument:&val atIndex:2];//前兩個(gè)參數(shù)已被target和selector占用
[invocation invoke];
}
@end