• UINavigationController便于pop的category


    UINavigationController便于pop的category

    效果图:

    这个category是为了方便UINavigationController用于跳转到指定的控制器当中,用于跳级,如果pop的控制器不存在,会直接提示:

    category源码:

    UINavigationController+POP.h 与 UINavigationController+POP.m

    //
    //  UINavigationController+POP.h
    //  YouXianMing
    //
    //  Created by YouXianMing on 14-9-20.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface UINavigationController (POP)
    
    - (NSArray *)popToViewControllerClass:(Class)viewControllerClass animated:(BOOL)animated;
    
    @end
    //
    //  UINavigationController+POP.m
    //  YouXianMing
    //
    //  Created by YouXianMing on 14-9-20.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "UINavigationController+POP.h"
    
    @implementation UINavigationController (POP)
    
    - (NSArray *)popToViewControllerClass:(Class)viewControllerClass animated:(BOOL)animated
    {
        UIViewController *controller = nil;

        for (UIViewController *oneController in self.viewControllers) {

            if ([oneController isMemberOfClass:viewControllerClass]) {

                controller = oneController;

                break;

            }

        }

    if (controller == nil) {
            NSLog(@"%s:%s:%d 要pop的控制器指针为空", __FILE__, __func__, __LINE__);
            return nil;
        }
        
        return [self popToViewController:controller
                                animated:animated];
    }
    
    @end

    源码:

    RootViewController.m

    //
    //  RootViewController.m
    //  YouXianMing
    //
    //  Created by YouXianMing on 14-9-20.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "RootViewController.h"
    #import "SecondViewController.h"
    
    @interface RootViewController ()
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 设置导航栏样式以及标题以及view的背景色
        [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]];
        self.title = @"First ViewController";
        self.view.backgroundColor = [UIColor whiteColor];
        
        // 添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(tapEvent)];
        [self.view addGestureRecognizer:tap];
    }
    
    - (void)tapEvent
    {
        [self.navigationController pushViewController:[SecondViewController new]
                                             animated:YES];
    }
    
    - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color
    {
        NCTitleAttribute *titleAttribute = [NCTitleAttribute new];
        titleAttribute.titleFont         = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f];
        titleAttribute.titleColor        = color;
        
        return titleAttribute;
    }
    
    @end

    SecondViewController.m

    //
    //  SecondViewController.m
    //  YouXianMing
    //
    //  Created by YouXianMing on 14-9-20.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "SecondViewController.h"
    #import "ThirdViewController.h"
    
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 设置导航栏样式以及标题
        [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]];
        self.title = @"Second ViewController";
        self.view.backgroundColor = [UIColor redColor];
        
        // 添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(tapEvent)];
        [self.view addGestureRecognizer:tap];
    }
    
    - (void)tapEvent
    {
        [self.navigationController pushViewController:[ThirdViewController new]
                                             animated:YES];
    }
    
    - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color
    {
        NCTitleAttribute *titleAttribute = [NCTitleAttribute new];
        titleAttribute.titleFont         = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f];
        titleAttribute.titleColor        = color;
        
        return titleAttribute;
    }
    
    @end

    ThirdViewController.m

    //
    //  ThirdViewController.m
    //  YouXianMing
    //
    //  Created by YouXianMing on 14-9-20.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "ThirdViewController.h"
    #import "RootViewController.h"
    
    @interface ThirdViewController ()
    
    @end
    
    @implementation ThirdViewController
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        
        // 设置导航栏样式以及标题
        [self titleTextAttributes:[self createTitleTextAttributes:[UIColor redColor]]];
        self.title = @"Third ViewController";
        self.view.backgroundColor = [UIColor cyanColor];
        
        // 添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(tapEvent)];
        [self.view addGestureRecognizer:tap];
    }
    
    - (void)tapEvent
    {
        [self.navigationController popToViewControllerClass:[RootViewController class]
                                                   animated:YES];
    }
    
    - (NCTitleAttribute *)createTitleTextAttributes:(UIColor *)color
    {
        NCTitleAttribute *titleAttribute = [NCTitleAttribute new];
        titleAttribute.titleFont         = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f];
        titleAttribute.titleColor        = color;
        
        return titleAttribute;
    }
    
    @end

    需要注意的一些地方:

  • 相关阅读:
    用js实现cookie的读、写、全部删除和删除指定cookie值的删除---源码
    JS手机号码格式验证
    vuex
    解决“此图片来自微信公众平台未经允许不可引用”的方法
    二叉树
    剑指 Offer 10- II. 青蛙跳台阶问题
    logrotate处理Gunicorn日志
    Linux日志切割神器logrotate原理介绍和配置详解
    Jenkins任务启动的后台进程被自动kill
    Flex、Grid、媒体查询实现响应式布局
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3983530.html
Copyright © 2020-2023  润新知