小工具

作者: 简繁之间_来去自然 | 来源:发表于2022-08-03 09:04 被阅读0次
/// 打印当前rootVc 所在层级
 po [[[UIWindow keyWindow] rootViewController] _prontHierarchy]
/// 1 递归获取子视图
- (void)getSub:(UIView *)view andLevel:(int)level {
    NSArray *subviews = [view subviews];
    // 如果没有子视图就直接返回
    if ([subviews count] == 0) return;

    for (UIView *subview in subviews) {
        // 根据层级决定前面空格个数,来缩进显示
        NSString *blank = @"";
        for (int i = 1; i < level; i++) {
            blank = [NSString stringWithFormat:@"  %@", blank];
        }
        // 打印子视图类名
        NSLog(@"%@%d: %@", blank, level, subview.class);
        // 递归获取此视图的子视图
        [self getSub:subview andLevel:(level + 1)];
    }
}
- (void)getSubVC:(UIViewController *)vc andLevel:(int)level {
   if ([vc isKindOfClass:[UITabBarController class]]) {
        NSLog(@"--==-level : %d tabCon  : %@---",level,vc.className);
       UITabBarController * tabCon = (UITabBarController *)vc;
       for (UIViewController * subVc in tabCon.viewControllers) {
           [self getSubVC:subVc andLevel:level + 1];
       }
    }else if ([vc isKindOfClass:[UINavigationController class]]){
        NSLog(@"--==-level : %d nav  : %@---",level,vc.className);
        UINavigationController * nav = (UINavigationController *)vc;
        for (UIViewController * subVc in nav.viewControllers) {
            [self getSubVC:subVc andLevel:level + 1];
        }
    }else if ([vc isKindOfClass:[UIViewController class]]){
        NSLog(@"--==-level : %d vc  : %@---",level,vc.className);
    }
}
/// 2 获取某个类的所有子类
- (NSArray *)getAllSubClassNameWithClass:(Class)class {
    NSMutableArray *mutArr = [NSMutableArray array];
    int list;
    Class *tempClass = NULL;
    list = objc_getClassList(NULL,0);
    if (list > 0) {
        NSLog(@"--== list:%d---",list);
        tempClass = (__unsafe_unretained Class *)malloc(sizeof(Class) * list);
        list = objc_getClassList(tempClass, list);
        for (int i = 0; i < list; i++) {
            NSLog(@"--== sub : %@---",class_getSuperclass(tempClass[i]));
            if (class_getSuperclass(tempClass[i]) == class){
                [mutArr addObject:NSStringFromClass(tempClass[i])];
                NSLog(@"--== cur%@\n", NSStringFromClass(tempClass[i]));
            }
        }
        free(tempClass);
    }
    return [mutArr copy];
}
///3 获取当前响应者,并取消当前window上 响应者的响应状态
- (void)tapActioDis{
    UIWindow *keywindow = [[UIApplication sharedApplication] keyWindow];
    id firstResponder = [keywindow performSelector:@selector(firstResponder)];
    [firstResponder resignFirstResponder];
}
///4 获取当前VC
+ (UIViewController *)getCurrentVC {

    UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
    UIViewController *currentVC = [self getCurrentVCFrom:rootViewController];
    return currentVC;
}

+ (UIViewController *)getCurrentVCFrom:(UIViewController *)rootVC {
    UIViewController *currentVC;
    if ([rootVC presentedViewController]) {
        // 视图是被presented出来的
        rootVC = [rootVC presentedViewController];
    }

    if ([rootVC isKindOfClass:[UITabBarController class]]) {
        // 根视图为UITabBarController
        currentVC = [self getCurrentVCFrom:[(UITabBarController *)rootVC selectedViewController]];
    } else if ([rootVC isKindOfClass:[UINavigationController class]]){
        // 根视图为UINavigationController
        currentVC = [self getCurrentVCFrom:[(UINavigationController *)rootVC visibleViewController]];
    } else {
        // 根视图为非导航类
        currentVC = rootVC;
    }
    return currentVC;
}
//获取文件大小
- (long long)fileSizeAtPath:(NSString *)filePath{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:filePath]){
        return 0;
    }else{
        long long size = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];

        NSLog(@"--==-size : %lld  %@ filePath : %@----",size,[self getBetterUnit:@(size) round:false],[filePath componentsSeparatedByString:@"/"].lastObject);
        return size;
    }
}

//获取文件夹下所有文件以及文件夹的大小
- (long long)folderAndSubsSizeAtPath:(NSString *)folderPath{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:folderPath]) return 0;

    long long folerSize = 0;
    NSArray * arrSubName = [fileManager subpathsAtPath:folderPath];
    NSLog(@"--==-arrSubName : %@---",arrSubName.modelToJSONString);
    for (NSString * subName in arrSubName) {
        NSString * path  = [folderPath stringByAppendingPathComponent:subName];
        folerSize += [self fileSizeAtPath:path];
        NSLog(@"--==- folerSize: %lld---",folerSize);
    }
    return folerSize;
}

相关文章

网友评论

      本文标题:小工具

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