swift:解决iOS8中appearanceWhenContainedInInstancesOfClasses不能用

swift中此方法在iOS9开始才能用,为了解决这个问题需要用oc写个分类,但是考虑到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;
//强制旋转屏幕
+ (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];
}

//强制旋转屏幕
+ (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];//前两个参数已被target和selector占用
[invocation invoke];
}

@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容