写了很长的NavigationController介绍,结果被cnblog吞了,没存档,算了,简单粗暴,直接上如何使用。

  1.创建3个Controller,继承自UIViewController

在AppDelegate.h中

//
// AppDelegate.m
// UINavigationController
//
// Created by lcd on 15/9/11.
// Copyright (c) 2015年 lcd. All rights reserved.
// #import "AppDelegate.h"
#import "FirstViewController.h"
#import "SecondViewController.h"
#import "ThirdViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

FirstViewController *firstViewController = [[FirstViewController alloc] init];


firstViewController.view.backgroundColor = [UIColor redColor];

SecondViewController *secondViewController = [[SecondViewController alloc] init];

secondViewController.view.backgroundColor = [UIColor whiteColor];

ThirdViewController *thirdViewController = [[ThirdViewController alloc] init];

   thirdViewController.view.backgroundColor = [UIColor cyanColor];

//创建导航控制器
UINavigationController *navigation = [[UINavigationController alloc] init]; return YES;
}

2.使用NavigationController有多种方式

//第一种:将需要NavigationController 管理的视图添加进NavigationController 的子视图数组中
UINavigationController *navigation = [[UINavigationController alloc] init];
navigation.viewControllers = @[firstViewController,secondViewController,thirdViewController];
//第二种:逐个添加子控制器
[navigation addChildViewController:firstViewController];
[navigation addChildViewController:secondViewController];
[navigation addChildViewController:thirdViewController];
//第三种:初始化NavigationController时添加自控制器
UINavigationController *navigation = [[UINavigationController alloc] initWithRootViewController:firstViewController];

3.添加子控制器后,将navigation设置为窗口的根控制器

self.window.rootViewController = navigation;

这样运行,显示的是第三个ViewController,这是因为,NavigationController是以栈的方式管理子视图,如图:

先添加的视图被放在了栈底,显示在我们面前的是栈顶视图。点击back会把栈顶视图弹出,即为出栈(pop)操作。

NavigationController以 push(入栈)和pop(出栈)管理子视图。

4. NavigationController 结构

4.1导航栏

被NavigationController管理的视图公用一个导航栏,导航栏显示内容由栈顶控制器决定

在ThirdViewController.m中

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.title = @"我是第三个控制器";
}

左上角返回键文字(Back) 由上一个控制器控制

在SecondViewController.m中

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回第二个界面" style:nil target:nil action:nil];
}

运行结果如下图:

4.2 在导航栏添加按钮

UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil];

UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCompose target:nil action:nil];

self.navigationItem.rightBarButtonItems = @[button1, button2];

修改右按钮格式

self.navigationItem.titleView = [UIButton buttonWithType:UIButtonTypeContactAdd];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemTrash target:nil action:nil];
//左按钮同理

隐藏back按钮

[self.navigationItem setHidesBackButton:YES];

4.3 设置导航条样式

[self.navigationController.navigationBar setBarStyle:UIBarStyleDefault];
//样式枚举值如下:

typedef NS_ENUM(NSInteger, UIBarStyle) {

UIBarStyleDefault          = 0,

UIBarStyleBlack            = 1,

UIBarStyleBlackOpaque      = 1, // Deprecated. Use UIBarStyleBlack

UIBarStyleBlackTranslucent = 2, // Deprecated. Use UIBarStyleBlack and set the translucent property to YES

};

设置导航栏图片

[self.navigationController.navigationBar
setBackgroundImage:[UIImage imageNamed:@"图片名称"] forBarMetrics:UIBarMetricsDefault];

4.4 其他属性

//设置导航条颜色
self.navigationController.navigationBar.barTintColor = [UIColor orangeColor];
//关闭导航条毛玻璃效果
// self.navigationController.navigationBar.translucent = NO;
//隐藏导航条
// self.navigationController.navigationBarHidden = YES;
//设置导航条内容的颜色
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
//导航条背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"pic"] forBarMetrics:UIBarMetricsDefault];

titleTextAttributes

//这是UINavigationBar的一个属性,通过它你可以设置title部分的字体,这个属性定义如下
@property(nonatomic,copy) NSDictionary *titleTextAttributes __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0) UI_APPEARANCE_SELECTOR;
//设置title的字体颜色为黄色
NSDictionary *dict = [NSDictionary dictionaryWithObject:[UIColor yellowColor] forKey:UITextAttributeTextColor];
firstViewController.navigationController.navigationBar.titleTextAttributes = dict;

5.界面跳转

从FirstViewController跳转到SceondViewController

在FirstViewController.m中,添加button,并在button事件中添加如下代码:

 SecondViewController *secondViewController = [[SecondViewController alloc] init];
[self.navigationController pushViewController:secondViewController animated:YES];

从SceondViewController返回FirstViewController:

[self.navigationController popViewControllerAnimated:YES];

注意:从后一个界面跳转回前一个界面,一定要用popViewController,千万不要alloc一个FirstViewController,push到FirstViewController

[self.navigationController popToRootViewControllerAnimated:YES];//这个方法可以跳转回第一个界面

UINavigationController基本使用的更多相关文章

  1. iOS UINavigationController(内容根据iOS编程编写)

    我们知道 UITabBarController 对象,可以通过使用该对象,用户可以切换不同的屏幕.当要切换的各个屏幕之间没有相互依存关系的时候,该对象可以很好的完成任务.但是当多个屏幕互有关系的时候, ...

  2. UINavigationController

    知识点: 1)UINavigationController 2)UINavigationBar 3)UINavigationItem 4)UIToolBar ===================== ...

  3. 混合使用UITabBarController和UINavigationController

    混合使用这两个控件的好处是我们可以在NavigationBar添加更多的东西,如标题,按钮等.让用户能够获得更多的信息. UITabBarController的属性ViewControllers接受以 ...

  4. 基本组件的使用——UINavigationController

    作用:在多个ViewController中切换.UINavigationController内部以栈的形式维护一组ViewController, 因此,当导航进入一个新视图的时候,会以push的形式将 ...

  5. 解决UINavigationController在pushViewController时出现的"卡顿"问题

    进行开发中,遇到了个小问题: 在使用UINavigationController的-pushViewController:animated:执行入栈一个子控制器操作时(即最新栈顶子控制器),会出现推出 ...

  6. UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解

    (1)导航控制器初始化的时候一般都有一个根视图控制器,导航控制器相当于一个栈,里面装的是视图控制器,最先进去的在最下面,最后进去的在最上面.在最上面的那个视图控制器的视图就是这个导航控制器对外展示的界 ...

  7. IOS 学习 开发 自定义 UINavigationController 导航

    文件目录如下:基本导航顺序: root -> First -> Second -> Third.其中,FirstViewController作为 navigation堆栈的rootv ...

  8. APP标配控制器:UINavigationController

    导航控制器UINavigationController简介: 只要看到控制器界面上部有一个条就是导航控制器UINavigationController 导航控制器最上面有一个条是导航条高度44,Y值是 ...

  9. UIScrollerView遇到UINavigationController

    今天在UITabBarController  的第一个Tab 页面中放入一个ScrollView, 原本以为可以正常运行. 结果却让人大跌眼镜.  每当我手动滚动或者 缓慢导航到另外一个页面时,当前的 ...

  10. IOS开发之控件篇UINavigationController第一章 - 介绍

    UINavigationController是一个比较常见的控件,它连接个视图,例如一个视图走到另外一个视图,之间的联系都可以用这个NavigationController的方法 一般都会由两个部分组 ...

随机推荐

  1. cdoj 1131 男神的礼物 区间dp

    男神的礼物 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1131 Descr ...

  2. C# 利用WORD模板和标签(bookmark) 批量生成WORD

    前言: 由于对C#操作WORD不熟悉,也就留下这么一篇水文,别吐糟...=_=||| 利用Microsoft.Office.Interop.Word (2003版也就11版)——因为部分客户端还是用O ...

  3. 【JavaScript】你知道吗?Web的26项基本概念和技术

    Web开发是比较费神的,需要掌握很多很多的东西,特别是从事前端开发的朋友,需要通十行才行.今天,本文向初学者介绍一些Web开发中的基本概念和用到的技术,从A到Z总共26项,每项对应一个概念或者技术. ...

  4. wordpress文章ID不连续显示问题的完美解决

    在最新版的 wordpress 系统中,依然存在着文章ID不连续显示的问题,也就是我们还没有上传多少文章,在数据库里的ID号已经很大了,也就是说如果我们的博客使用的是固定链接,那么在前台显示的ID相差 ...

  5. [Angular 2] Create template with Params

    Angular 2 templates have a special let syntax that allows you to define and pass a context when they ...

  6. Codeforces Round #250 (Div. 2)——The Child and Set

    题目链接 题意: 给定goal和limit,求1-limit中的若干个数,每一个数最多出现一次,且这些数的lowbit()值之和等于goal,假设存在这种一些数,输出个数和每一个数:否则-1 分析: ...

  7. How does a relational database work

    http://blog.jobbole.com/100349/ http://coding-geek.com/how-databases-work/

  8. nopCommerce 数据缓存

    为了提高一个系统或网站的性能和IO吞吐量,我们一般都会采用缓存技术.当然NopCommerce也不例外,本文我们就来给大家分析一下nop中Cache缓存相关类设计.核心源码及实现原理. 一.Nop.C ...

  9. 分布式缓存技术redis学习(一)——redis简介以及linux上的安装

    redis简介 redis是NoSQL(No Only SQL,非关系型数据库)的一种,NoSQL是以Key-Value的形式存储数据.当前主流的分布式缓存技术有redis,memcached,ssd ...

  10. 认识C中的结构体

    C中结构体是另外一种表示数据形式的方式,结构体中可以表示C中的基本数据形式,如int,double....结构体可以让我们更好的表示数据.下面来看看结构体. 说到结构体首先要了解的是它的申明形式,要申 ...