美文网首页
swift:解决iOS8中appearanceWhenConta

swift:解决iOS8中appearanceWhenConta

作者: 半江瑟瑟 | 来源:发表于2016-09-22 18:20 被阅读1438次
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

相关文章

网友评论

      本文标题:swift:解决iOS8中appearanceWhenConta

      本文链接:https://www.haomeiwen.com/subject/fdwzettx.html