iOS开发之视图切换

一、视图切换

  1. UITabBarController (分页控制器) - 平行管理视图
  2. UINavigationController (导航控制器) - 压栈出栈管理视图
  3. 模态窗口

二、UITabBarController分页控制器

  1. UITabBarController是为了利用 页签切换视图 设计的控制器
  2. 该控制器有一个UITabBar控件,用户通过点击UITabBar进行视图切换
  3. UITabBarController本身会不显示任何视图,它只是一个 容器控制器
  4. 为了减少视图间的耦合,所有UITabBarController的子视图的相关标题、图标等信息由子视图自己控制

注意事项:

  1. UITabBarController会一次性初始化所有子控制器,但默认只加载第一个控制器视图
  2. 每个视图控制器都有一个tabBarController属性,用它来访问所在的UITabBarController
  3. 每个视图控制器都有一个tabBarItem属性,用它来控制UITabBarController的UITabBar上的显示信息
  4. tarBarItem的image属性必须是png格式,并且打开alpha通道 ,否则无法正常显示
  5. UITabBarController通常是作为整个程序的rootViewController的,我们需要在程序的window显示之前就创建好它。

具体步骤如下:

  1. 创建一个UITabBarController对象
  2. 创建UITabBarController中每一个tab对应的要显示的对象viewController
  3. 通过UITabBarController的viewControllers属性将要显示的所有viewController添加到UITabBarController中
  4. 通过设置UITabBarController对象为window.rootViewController,然后显示window

代码如下:

//a.初始化一个tabBar控制器
UITabBarController *tarbarVC = [[UITabBarController alloc] init];
//设置控制器为Window的根控制器
self.window.rootViewController = tarbarVC;
//b.创建子控制器
UIViewController *c1 = [[UIViewController alloc] init];
c1.view.backgroundColor = [UIColor grayColor];
c1.view.backgroundColor=[UIColor greenColor];
c1.tabBarItem.title = @"消息";
c1.tabBarItem.image = [UIImage imageNamed:@"tab_recent_nor"];
c1.tabBarItem.badgeValue = @"123";
UIViewController *c2 = [[UIViewController alloc] init];
c2.view.backgroundColor = [UIColor brownColor];
c2.tabBarItem.title = @"联系人";
c2.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor"];
UIViewController *c3 = [[UIViewController alloc] init];
c3.tabBarItem.title = @"动态";
c3.tabBarItem.image = [UIImage imageNamed:@"tab_qworld_nor"];
UIViewController *c4 = [[UIViewController alloc] init];
c4.tabBarItem.title = @"设置";
c4.tabBarItem.image = [UIImage imageNamed:@"tab_me_nor"];
//c.添加子控制器到ITabBarController中
tarbarVC.viewControllers = @[c1,c2,c3,c4];
//d.设置Window为主窗口并显示出来
[self.window makeKeyAndVisible];

UITabBarControllerDelegate代理

代码如下:

#pragma mark 该方法用于控制TabBarItem能不能选中
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;

改变UITabBarController当前显示视图的方法

  1. 改变selectedIndex属性
  2. 改变selectedViewController属性
  3. 改变viewControllers属性

三、UINavigationController导航控制器

  1. UINavigationController中的子控制器以栈的形式存储,只有在栈顶部的控制器才能显示在界面上
  2. 压栈pushController,出栈popController
  3. UINavigationController必须有一个根控制器rootViewController
  4. 子控制器通过navigationController属性访问UINavigationController
  5. 在栈中的子控制器都有一个导航栏navigationBar,通过navigationItem去控制

UINavigationItem属于MVC中的Model,封装了要显示在UINavigationBar上的数据:

title: 标题
titleView :标题视图
leftBarButtonItem :左按钮
rightBarButtonItem :右按钮

下一个子视图左侧返回按钮leftBarButtonItem的标题优先级:

  1. 导航栏返回按钮backBarButtonItem的标题
  2. 导航栏navigationItem的标题
  3. 视图控制器的标题

UINavigationController常用的主要方法:

代码如下:

#pragma mark 压栈,把控制器压入导航控制器子控制器栈中
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
#pragma mark 出栈,把导航控制器子控制器栈的栈顶弹出
- (void)popViewControllerAnimated:(BOOL)animated;
#pragma mark 多次出栈直到栈顶为指定控制器
- (void)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
#pragma mark 多次出栈直到栈顶为根控制器
- (void)popToRootViewControllerAnimated:(BOOL)animated;

四、模态窗口

代码如下:

#pragma mark 从下方弹出指定的视图控制器,赋予模态,即当前视图关闭前,其他视图上的内容无法操作
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;
#pragma mark 关闭模态窗口,该方法在模态窗口中调用
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion;

(0)

相关推荐

  • iOS应用中使用Toolbar工具栏方式切换视图的方法详解

    关于UIToolbar ToolBar工具栏是视图View的属性,可以在工具栏上添加工具栏按钮Bar Button Item(可以是自定义的Custom.也可以是系统自带的BarButtonSystemItem ),视图控制器可以通过工具栏项对视图中内容进行操作. 注意事项: 在导航栏控制器中会有一个UIToolBar实例,但默认是隐藏的,如果需要显示,需要通过这个方法将其打开: 在这里需要注意的是,与UINavigationBar类似,导航控制器拥有且只拥有一个UIToolBar实例,但UIT

  • iOS自定义键盘切换效果

    本文实例为大家分享了iOS自定义键盘切换的相关代码,供大家参考,具体内容如下 具体代码如下 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.title = @"小飞哥键盘"; self.textField = [[UITextField alloc] initWithFrame:CGRectMa

  • iOS开发中的ViewController转场切换效果实现简介

    在iOS7之前,View Controller的切换主要有4种: Push/Pop,NavigationViewController Present and dismis Modal UITabBarController addChildViewController(一般用于自定义的继承于 UIViewController 的容器子类) iOS5,调用- (void)transitionFromViewController:(UIViewController *)fromViewControll

  • iOS实现日历翻页动画

    本文我主要描述两方面: 1.日历(简单描述原理) 2.翻页动画(重点) 最终的效果如下图:     图中沿四个对角的翻页动画,代表对应方向手势的滑动 1. 日历 要实现一个日历,其实原理很简单,我们只要知道三个数据: 1.今天是哪一天 2.这个月的第一天是星期几(哪天) 3.这个月总共有多少天 根据这个三个数据,就可以把得到的日期显示在日历上了,至于日历用什么来显示,我个人比较喜欢用UICollectionView,一个cell代表一天,当然也可以用很多个label,button来显示. 1.获

  • 比较IOS开发中常用视图的四种切换方式

    在iOS开发中,比较常用的切换视图的方式主要有以下几种: 1. push.pop 使用举例(ViewController假设为需要跳转的控制器): [self.navigationController pushViewController:ViewController animated:YES]; //入栈,跳转到指定控制器视图 [self.navigationController popViewControllerAnimated:YES]; //弹栈,返回到前一个视图 [self.navig

  • 一步一步实现iOS主题皮肤切换效果

    本文实例为大家分享了iOS主题皮肤切换代码,供大家参考,具体内容如下 1. 主题皮肤功能切换介绍 主题切换就是根据用户设置不同的主题,来动态改变用户的界面,通常会改变navigationBar背景图片.tabBar背景图片.tabBar中的按钮的图片和选中的背景图片.navigationItem.title 标题的字体颜色.UI中其他元素控件 下载源代码地址: http://xiazai.jb51.net/201609/yuanma/ThemeSkinSetup(jb51.net).rar 2.

  • 浅析iOS多视图滑动点击切换的集成

    前言 多视图滑动点击切换这个视图在很多App都有用到,我对这个View进行了封装,外界只需要调用一个接口,就能实现这个效果,使用方法和系统的tabbarController很相似. 外界只需要调用下面这个接口即可集成. /** * 添加一个子控制器 */ - (void)addSubItemWithViewController:(UIViewController *)viewController; HYTabbarView效果图如下 HYTabbarView可灵活配置一屏宽显示多少个标题,以及标

  • 实例讲解iOS中的UIPageViewController翻页视图控制器

    一.引言 UIPageViewController是iOS中少见的动画视图控制器之一,通过它既可以创建类似UIScrollView与UIPageControl结合的滚屏视图,也可以创建类似图书效果的炫酷翻页视图. UIPageViewController在iOS 5 SDK中首次引入,它使得开发者可以使用这个ViewController创建分页视图.在iOS 6中,这个类有了更新,支持滚动过渡效果.使用Page View,用户可以方便的通过手势在多个页面之间导航.UIPageViewContro

  • iOS图片界面翻页切换效果

    先看效果: 下面贴代码: #import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *backgroundView; @property (strong,nonatomic) NSArray *array; @end @implementation ViewController -(NSArray *)array { if (_arra

  • Unity iOS混合开发界面切换思路解析

    思路 之前一篇文章里面只谈到了Unity和iOS工程的融合,并没有谈到iOS和Unity界面的切换,这里谈谈思路,Unity导出的iOS工程里面的结构大致是这样的,有一个Window,Window上有一个UnityView,但是并没有控制器,也没有根控制器,虽然在导出的iOS工程中Classes文件夹下的UnityAppController中有rootController的属性,但是上面也标注为空~ 所以,思路就只有一种,,既然Unity导出的iOS工程有一个Window并没有控制器,那好,混合

随机推荐