首页 > 其他 > 详细

UINavigationController便于pop的category

时间:2014-09-20 18:12:20      阅读:314      评论:0      收藏:0      [点我收藏+]

UINavigationController便于pop的category

bubuko.com,布布扣

效果图:

bubuko.com,布布扣

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

bubuko.com,布布扣

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

需要注意的一些地方:

bubuko.com,布布扣

bubuko.com,布布扣

 

UINavigationController便于pop的category

原文:http://www.cnblogs.com/YouXianMing/p/3983530.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!