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

一、简介

一个iOS的app很少只由一个控制器组成,除非这个app极其简单

当app中有多个控制器的时候,我们就需要对这些控制器进行管理

有多个view时,可以用一个大的view去管理1个或者多个小view

控制器也是如此,用1个控制器去管理其他多个控制器

为了便于管理控制器,iOS提供了2个比较特殊的控制器("父控制器")

UINavigationController

UITabBarController

二、使用步骤

  • UINavigationController的使用步骤
  • 初始化UINavigationController
  • 设置UIWindow的rootViewController为UINavigationController
  • 根据具体情况,通过push方法添加对应个数的子控制器

三、UINavigationController的view内部结构

注意:NavigationController的NavigationBar的 的高度 是44,不包括状态栏的状态

四、子控制器的获取方式

1> 获取方式

@property(nonatomic,readonly) NSArray *childViewControllers

@property(nonatomic,copy) NSArray *viewControllers;

注意:

childViewControllers :是在UIViewController中属性,并且只读

viewControllers:是在UINavigationController中的属性

因此添加子控制器可以利用

navc.viewControllers = @[vc1,vc2];、

 2> Bug

当导航控制器使用push的动画形式添加两个控制器的时候,然后利用childViewControllers获取子控制器对象,打印时候,会显示只有一个

解决办法:动画设置为NO 即可

五、UINavigationController的原理

导航控制器是一种栈的结构(先进后出),

    • 使用push方法能将某个控制器压入栈,最后入栈的控制器为栈顶控制器,更控制器为栈底控制器

第一个入栈的控制器为rootViewController

    • 使用pop方法可以移除控制器

方法:

    • 使用push方法能将某个控制器压入栈

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

    • 使用pop方法可以移除控制器
    • 将栈顶的控制器移除

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

    • 回到指定的子控制器

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

    • 回到根控制器(栈底控制器)

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;

六、修改导航控制器内容

// 设置标题

self.navigationItem.title

self.title

// 设置左右按钮

self.navigationItem.leftBarButtonItem

self.navigationItem.leftBarButtonItems

self.navigationItem.rightBarButtonItem

self.navigationItem.rightBarButtonItems

// 设置标题为自定义view

self.navigationItem.titleView

// nav bar 颜色

[self.navigationController.navigationBar setBackgroundColor:[UIColor redColor]]; // 仅仅是导航条的颜色

[self.navigationController.navigationBar setTintColor:[UIColor redColor]]; // 主题(按钮)颜色

[self.navigationController.navigationBar setBarTintColor:[UIColor redColor]]; // 导航条+状态栏颜色

// 设置bar不透明

self.navigationController.navigationBar.translucent = NO;

// 设置自定义标题属性

// title

NSDictionary* attr = @{ NSFontAttributeName : [UIFont systemFontOfSize:10],NSForegroundColorAttributeName : [UIColor redColor] };

[self.navigationController.navigationBar setTitleTextAttributes:attr];

// titleView

UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 44)];

titleLabel.font = [UIFont boldSystemFontOfSize:20];

titleLabel.textColor =[UIColor orangeColor];

titleLabel.textAlignment = NSTextAlignmentCenter;

titleLabel.text = @"自定义标题";

self.navigationItem.titleView = titleLabel;

// 导航条设置自定义图片为按钮(原始图 不渲染)

UIImage* image = [UIImage imageNamed:@"navigationbar_friendsearch_highlighted"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

时间: 2024-10-26 03:57:08

IOS开发UI篇-NavigationController的基本使用的相关文章

IOS开发UI篇-NavigationController的控制器之间的跳转

一.效果图如下 1> 第一个控制器的NavigationBar隐藏 2> 有按钮,可以跳转到下一个控制器,返回上一个控制器或者根控制器 二.思路代码 思路: 1> 设置window的跟控制器为navigationController 2> 设置一个控制器的基类 主要代码实现如下: AppDelegate.m // // AppDelegate.m // navigation的简单实用(纯代码) // // Created by gxiangzi on 15/8/7. // Copy

iOS开发UI篇—实现一个私人通讯录小应用(二)

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi

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

IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController *nav=[[UINavigationControlleralloc]init]; 2.设置导航控制器为window的根视图 self.window.rootViewController=nav; 3.添加 YYOneViewController  *one = [[YYOneViewContro

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

iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器 比如,用一个控制器A去管理3个控制器B.C.D.控制器A被称为控制器B.C.D的“父控制器”:控制器B.C.D的被称为控制器A的“子控制器” 为了便于管理控制器,iOS提供了2个比较特殊的控

iOS开发UI篇—Modal简单介绍

iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展?出来 Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为? 二.代码说明 新建一个项目,在Application的代理中添加window和控制器. TXAppDelegate.m文件 1 #import "TXAppDelegate.h" 2 #import "TXOneViewController

iOS开发UI篇—实现一个私人通讯录小应用(二) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3777087.html iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意: 注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)butto

IOS开发UI篇—导航控制器属性和基本使用 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3768622.html IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) UINavigationController *nav=[[ UINavigationController alloc ] init ]; 2.设置导航控制器为window的根视图 self . window . rootViewController =nav

iOS开发UI篇—实现一个私人通讯录小应用(一) - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3773603.html iOS开发UI篇—实现一个私人通讯录小应用(一) 一.该部分主要完成内容 1.界面搭建                        2.功能说明 (1).只有当账号和密码输入框都有值的时候,登录按钮才能交互 (2).当取消勾选记住密码后,自动登录按钮也随之取消:当勾选了自动登录按钮时,记住密码按钮也一同勾选. (3).点击登陆后,弹出蒙版,界面不可交互,程序能够简单判断账号和密码是否正确

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接)

iOS开发UI篇—推荐两个好用的Xcode插件(提供下载链接) 这里推荐两款好用的Xcode插件,并提供下载链接. 一.插件和使用如下: 1.两款插件 对项目中图片提供自动提示功能的插件:KSImageNamed-Xcode-master 提供快速创建自动注释:VVDocumenter-Xcode-master 2.使用介绍: (1)KSImageNamed-Xcode-master的使用 安装该插件后,会对文件中图片进行智能提示. (2)VVDocumenter-Xcode-master能提供