一、效果图如下

1> 第一个控制器的NavigationBar隐藏

2> 有按钮,可以跳转到下一个控制器,返回上一个控制器或者根控制器

二、思路代码

思路:

  1> 设置window的跟控制器为navigationController

  2> 设置一个控制器的基类

主要代码实现如下:

 AppDelegate.m
//
//  AppDelegate.m
//  navigation的简单实用(纯代码)

#import "AppDelegate.h"
#import "GXNavController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    // 创建一个导航控制器
    GXNavController* navc = [[GXNavController alloc] init];
    // 设置跟控制器为导航控制器
    self.window.rootViewController = navc;
    [self.window makeKeyAndVisible];
    return YES;
}

.....
导航控制器类:GXNavController.h
#import <UIKit/UIKit.h>

@interface GXNavController : UINavigationController

@end
导航控制器类:GXNavController.m 
//
//  GXNavController.m
//  navigation的简单实用(纯代码)

#import "GXNavController.h"
#import "GXFirstController.h"

@interface GXNavController ()
@end

@implementation GXNavController

// 重写父类的init方法,设置跟控制器
- (instancetype)init
{
    GXFirstController* first = [[GXFirstController alloc] init];
    first.view.backgroundColor = [UIColor whiteColor];
    return [super initWithRootViewController:first];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 第一个隐藏导航条
    self.navigationBar.hidden = YES;
}

// 重写导航控制器的push方法,设置返回按钮为back
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    // 显示导航条
    self.navigationBar.hidden = NO;
    [super pushViewController:viewController animated:animated];
}

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
{
    // 第一个隐藏导航条
    self.navigationBar.hidden = YES;
    return [super popToRootViewControllerAnimated:animated];
}
@end

基类:GXBaseViewController.h

#import <UIKit/UIKit.h>

@interface GXBaseViewController : UIViewController

@property (nonatomic,weak)UIButton *popBtn;
@property (nonatomic,weak)UIButton *pushBtn;

- (void)pop2Previous;
- (void)push2Next;
@end

基类:GXBaseViewController.m

//
//  GXBaseViewController.m
//  navigation的简单实用(纯代码)

#import "GXBaseViewController.h"

@interface GXBaseViewController ()
@end

@implementation GXBaseViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // 创建返回的按钮
    UIButton* popBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [popBtn setTitle:@"返回上一个控制器" forState:UIControlStateNormal];
    [popBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    popBtn.backgroundColor = [UIColor grayColor];
    popBtn.frame = CGRectMake(100, 100, 200, 50);
    self.popBtn = popBtn;

    // 创建Push到下一个控制器
    UIButton* pushBtn = [UIButton buttonWithType:UIButtonTypeCustom];
    [pushBtn setTitle:@"push到下一个控制器" forState:UIControlStateNormal];
    [pushBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    pushBtn.backgroundColor = [UIColor grayColor];
    pushBtn.frame = CGRectMake(100, 300, 200, 50);
    self.pushBtn = pushBtn;

    // 注册监听事件
    [self.popBtn addTarget:self action:@selector(pop2Previous) forControlEvents:UIControlEventTouchUpInside];
    [self.pushBtn addTarget:self action:@selector(push2Next) forControlEvents:UIControlEventTouchUpInside];
}
#pragma mark - 子类重写
#pragma mark - 上一个
- (void)pop2Previous
{
    [self.navigationController popViewControllerAnimated:YES];
}

#pragma mark -下一个
- (void)push2Next
{
    [self.navigationController pushViewController:nil animated:YES];
}
@end

IOS开发UI篇-NavigationController的控制器之间的跳转的更多相关文章

  1. IOS开发UI篇-NavigationController的基本使用

    一.简介 一个iOS的app很少只由一个控制器组成,除非这个app极其简单 当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小v ...

  2. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  3. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

  4. iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期

    iOS开发UI篇—使用storyboard创建导航控制器以及控制器的生命周期 一.基本过程 新建一个项目,系统默认的主控制器继承自UIViewController,把主控制器两个文件删掉. 在stor ...

  5. iOS开发UI篇—控制器的创建

    iOS开发UI篇—控制器的创建 说明:控制器有三种创建方式,下面一一进行说明. 一.第一种创建方式(使用代码直接创建) 1.创建一个空的IOS项目. 2.为项目添加一个控制器类. 3.直接在代理方法中 ...

  6. iOS开发UI篇—控制器的View的创建

    iOS开发UI篇—控制器的View的创建 一.6种创建控制器View的方式 #import "NJAppDelegate.h" #import "NJViewContro ...

  7. iOS开发UI篇—Modal简单介绍

    iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的 ...

  8. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  9. iOS开发UI篇—从代码的逐步优化看MVC

    iOS开发UI篇—从代码的逐步优化看MVC 一.要求 要求完成下面一个小的应用程序. 二.一步步对代码进行优化 注意:在开发过程中,优化的过程是一步一步进行的.(如果一个人要吃五个包子才能吃饱,那么他 ...

随机推荐

  1. Android 文件操作之openFileOutput

    openFileOutput()方法的第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它.创建的文件保存在/data/data/<package ...

  2. win7 x64 jdk1.7.0_51

    1:我的 jdk与jre默认安装在:D:\Program Files\Java 2:配置环境变量(系统变量): (1)新建JAVA_HOME (2)新建CLASSPATH (3)编辑Path,%JAV ...

  3. 《Programming WPF》翻译 第5章 3.命名属性

    原文:<Programming WPF>翻译 第5章 3.命名属性 通过把同样的内嵌样式提升到资源中(正如第一章介绍的),我们可以给它一个名字,以及按名字使用它在我们的Button实例上, ...

  4. C#语言之“中英文混合字符串对齐”的方法【转】

    参考自:(1)http://www.cnblogs.com/cnluoke/articles/1213398.html (2)http://www.cnblogs.com/sql4me/archive ...

  5. 一条执行4秒的sql语句导致的系统问题 (转)

    为了一看究竟,抓取了一个awr报告.发现系统的负载情况确实很严重,每秒的redo有1.6M,可见系统的负载不是主要在select上,可能有一些dml之类的操作极为频繁. 看了下等待事件.都是关于loc ...

  6. if条件语句练习(相亲)

    public class a { public static void main(String[] arg){ //F是房子,Q是钱,N是能力,等于0说明没有,等于1说明有: 有一项具备则可以嫁,都不 ...

  7. QString转换为char*

    QString在Qt里相当于C++里的std::string,或者是C里的c style string.不过,QString跟编码相关,在低层想把一个QString发送出去相当麻烦,尤其对方用的不是Q ...

  8. 反转int型数字

    如 321 反转 123 120 反转21 注意处理最后的零,以及负数情况 ,最后就是溢出情况了 /** * @param {number} x * @return {number} */ var r ...

  9. Redis + Jedis + Spring 实例(对象的操作)

        目录(?)[+] 不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 一.预期 接上 ...

  10. Weblogic的Admin server进程将CPU消耗尽问题解决

    1.serverCPU被耗尽,持续100% 以下附nmon图 2.两个weblogicadmin server进程将CPU耗尽 问题:24298进程,占用百分之四千多的CPU资源 23529进程,占用 ...