iOS开发_简化控制器的跳转代码

  • 新建分类
  • UIViewController+GC.h

复制@interface UIViewController (GC)

// 简化控制器跳转
- (void)push:(id)controller;
// 简化返回
- (void)pop;
// 回到根控制器
- (void)pop_To_Root;

// 简化控制器弹出
- (void)present:(id)controller Finish:(void (^ __nullable)(void))completion;
// 简化消失
- (void)dismiss:(void (^ __nullable)(void))completion;

@end
  • UIViewController+GC.m

@implementation UIViewController (GC)

// 判断一个对象是实例对象还是类对象
- (BOOL)is_Instance:(id)gc_object {
    return [gc_object class] != gc_object;
}

// 简化控制器跳转
- (void)push:(id)controller {
    // 判断一个对象是实例对象
    if ([self is_Instance:controller]) {
        [self.navigationController pushViewController:controller animated:YES];
    }
    else {
        // 是一个类而已
        [self push:[[controller alloc] init]];
    }
}

// 简化返回
- (void)pop {
    [self.navigationController popViewControllerAnimated:YES];
}

// 回到根控制器
- (void)pop_To_Root {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

// 简化控制器弹出
- (void)present:(id)controller Finish:(void (^ __nullable)(void))completion {
    // 判断一个对象是实例对象
    if ([self is_Instance:controller]) {
        BC_Nav_Controller *navController;
        if ([controller isKindOfClass:[BC_Nav_Controller class]]) {
            navController = (BC_Nav_Controller *)controller;
        }
        else {
            navController = [[BC_Nav_Controller alloc] initWithRootViewController:controller];
        }
        navController.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:navController animated:YES completion:completion];
    }
    else {
        // 是一个类而已
        [self present:[[controller alloc] init] Finish:completion];
    }
}

// 简化消失
- (void)dismiss:(void (^ __nullable)(void))completion {
    [self dismissViewControllerAnimated:YES completion:completion];
}

@end
posted @   CH520  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示
西雅图
01:09发布
西雅图
01:09发布
6°
中雨
东北风
2级
空气质量
相对湿度
90%
今天
中雨
3°/12°
周二
小雨
4°/11°
周三
小雨
3°/9°