文档章节

UINavigationController基本使用

c
 coderCD
发布于 2015/09/16 21:11
字数 776
阅读 9
收藏 0

写了很长的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 结构

image: ../Art/nav_controllers_objects.jpg

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];//这个方法可以跳转回第一个界面

 

© 著作权归作者所有

c
粉丝 0
博文 9
码字总数 7027
作品 0
私信 提问
UITabBarController和UINavigationController的区别

UITabBarController 和UINavigationController都可以作为 window的根控制器(rootViewController),但界面内容的展示样式是不同的。其区别如下: 1 UITabBarController的导航栏展示位置在屏幕...

奋斗的青春年华
2016/06/20
179
0
Implementing Navigation with UINavigationControlle

问题: 你想要允许你的用户在视图之间来回切换 解决方法: 使用UINavigationController 讨论: 选择Empty Application取什么名字你随意,然后选择菜单文件选择New->New File...选择第一个obj...

人生天地间
2014/02/17
24
0
UITabBarController的使用

先看效果图 一般为了实现底部导航和跳转子控制器.一般都是UITabBarController和UINavigationController嵌套使用 一般将ViewController添加到UINavigationController管理, 然后将UINavigatio...

luoruowen
2016/11/02
73
0
UITabBar和UINavigation组合使用与自定义样式(iOS)

版权声明:本文为博主原创文章,未经博主允许不得转载。博主微信:lofocus https://blog.csdn.net/cuibo1123/article/details/45645157 UITabBarController和UINavigationController组合使用...

Xoneday
2015/05/11
0
0
自定义TabBar

要自定义UITabBarController,首先我们必须了解UITabBarController结构与其各个相关类的关系(TabBarController、TabBar、TabButton及ViewController)。其中,TabButton是一个双态的Button(...

SoulJa
2015/09/05
212
0

没有更多内容

加载失败,请刷新页面

加载更多

谁说多功能和低价格不能兼得?Aspose系列产品1024购买指南请查收!

你还在为了Word、Excel、PDF、CAD等文档格式转换而发愁吗? 你是否在寻找一款能够在应用程序中文档管理的工具呢? Aspose——支持100多种文件格式创建、编辑、转换和打印! 往下看,找一找哪...

mnrssj
3分钟前
1
0
hbase客户端API

本章介绍用于对HBase表上执行CRUD操作的HBase Java客户端API。 HBase是用Java编写的,并具有Java原生API。因此,它提供了编程访问数据操纵语言(DML)。 HBaseConfiguration类 添加 HBase 的配...

水木星辰
4分钟前
1
0
[插件化开发] 1. 初识OSGI

初识 OSGI 背景 当前product是以solution的方式进行售卖,但是随着公司业务规模的快速夸张,随之而来的是新客户的产品开发,老客户的产品维护,升级以及修改bug,团队的效能明显下降,为了解...

IsaacZhang
4分钟前
1
0
Webstorm 环境使用 nuxt.js 做开发,@ 和 ~ 别名配置

好的IDE + 好的代码提示 = 高效率的开发 webstorm 设置@和~别名,有助于代码查看和跳转. step 0 在项目下创建一个webpack.config.js,内容如下: const path = require('path')module.exp...

皇虫
8分钟前
1
0
Knative 实战:基于 Knative Serverless 技术实现天气服务-下篇

上一期我们介绍了如何基于 Knative Serverless 技术实现天气服务-上篇,首先我们先来回顾一下上篇介绍的内容: 通过高德天气 API 接口,每隔 3 个小时定时发送定时事件,将国内城市未来 3 天...

Mr_zebra
25分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部