• 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

    需要注意的一些地方:

  • 相关阅读:
    模板笔记2
    模板笔记
    qt打包可执行文件
    合并单独的视频和音频
    模板1
    mysql 数据表中查找重复记录
    mysql左连接右连接(查询两张表不同的数据)
    mysql--构造数据、导入导出
    mysql安装
    linux下启动tomcat服务
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/3983530.html
Copyright © 2020-2023  润新知