UIView之间常用视图之间切换方式

转载自:http://www.jianshu.com/p/0d53f9402c07
在平时编写代码的过程中,页面之间的跳转可以说就和MVC模式一样是开发必须的。但是可能我们知道一种或者几种页面之间的跳转,今天我就来总结一下我在开发之中遇到的所有的页面跳转代码。(关于控制器之间的简单的跳转,比如导航控制器跳转、故事版跳转、简单的模态跳转不在这里多说)

一、代理跳转。

通常我们在跳转中经常是通过你点击了某个事件或者某个操作使你进行控制器之间的跳转。那么我们可以在这个按钮事件或者操作里面写一个代理进行跳转或者传值。


二、block跳转。

大家都知道block块的强大之处,我个人认为block是代理的升级版本。他实现了代理能实现的功能,而且代码更加的简洁。只需要在视图A中进行一次声明然后在控制器B 中进行跳转代码的实现。
但是需要知道的是无论是代理还是block我们都是需要视图和控制器之间存在着联系的,不然没有办法去调用代理或者block。这是大家很容易忽略的地方,也是经常容易错的地方。


三、通知跳转。

我们也可以使用通知进行页面得跳转。通知在我看来就是比代理好的一点就是不需要视图和控制器之间有必然的关联就可以调用(当然他们最大的区别是一个可以多对多传值)。


四、直接在视图跳转

这一个方法是非常的直接,就是在视图中直接的跳转界面。说白了就是调出application然后也是以导航控制器的形式进行跳转。非常的简单实用(当然是在不需要进行传值等操作的时候。)
//视图直接涂转控制器
UINavigationController nav = (UINavigationController )[UIApplication sharedApplication].keyWindow.rootViewController;
SecViewController *sec = [[SecViewController alloc]init];
[nav pushViewController:sec animated:YES];
其他代码和上面一样

在IOS开发中,经常遇到两个View之间互相切换,列举下各种方式,但是下面每种方式都要自己灵活运用,不一定就是进入下一个、后一个必须用“一”里面的方式。
一:进入下\后一个View

A:insertSubView系列:(注意,如果你新增视图不够大,则遮不住上一层视图,即前后2个视图都存在,当然你可以做透明来查看所有,与二A对应)
• – addSubview: (常用增加视图在本View上面)
• – bringSubviewToFront;将新视图放在其他同级视图的top位置
• – insertSubview:atIndex: 将新视图放在第index层,index是从底层向上数的下标位置
• – insertSubview:aboveSubview:将新视图放在第二个参数view的上面
• – insertSubview:belowSubview:将新视图放在第二个参数view的下面
• – exchangeSubviewAtIndex:withSubviewAtIndex:改变新视图从第一个位置到第二个位置

B:presentViewController系列:(常用视图切换,与二B对应)

• – presentViewController:animated:completion: 弹出,出现一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil
• – presentModalViewController:animated: 弹出,出现一个新视图 可以带动画效果

C:UINavigationController系列:(常用导航栏视图切换,与二C对应)

• – pushViewController:animated: 推进一个新视图到栈里,出现新视图,可以带动画效果

例 pushViewController:animated:
二:返回上\前一个View

A:insertSubView系列:(注意,如果你新增视图不够大,则遮不住上一层视图,即前后2个视图都存在,当然你可以做透明来查看所有,与一A对应)
• – sendSubviewToBack: 将新视图放在其他同级视图的behind位置
• – removeFromSuperview:将新视图从父视图上移除
B:presentViewController系列:(与一B对应)
• – dismissViewControllerAnimated:completion:退出一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil
• – dismissModalViewControllerAnimated: 退出一个新视图 可以带动画效果

C:UINavigationController系列:(常用导航栏视图切换,与一C对应)
• – popViewControllerAnimated: 从一个栈中退出视图,返回上一层,可以带动画效果
• – popToRootViewControllerAnimated:从一个栈中退出视图,返回到navigation的RootView,可以带动画效果
• – popToViewController:animated:从一个栈中退出视图,返回到navigation中指定的view,可以带动画效果
基本上上面已经介绍完全部常用视图切换方式:

三:UITabBarController:(需要先将几种视图在tabBar种设置好)
• – setViewControllers:animated:设置要出现的视图
• selectedViewController 设置要出现的视图
• selectedIndex 设置要出现的视图下标

UIView 视图切换的更多相关文章

  1. iOS开发系列--视图切换

    概述 在iOS开发中视图的切换是很频繁的,独立的视图应用在实际开发过程中并不常见,除非你的应用足够简单.在iOS开发中常用的视图切换有三种,今天我们将一一介绍: UITabBarController ...

  2. IOS 视图切换动画

    我在网上找到的这个小方法,被我举一反三使用的屡试不爽.比如用在,当视图需要执行某一方法跳转到新的一个UIView上,从底层渐变浮到最上层.就是一个不错的视觉效果或者当需要类似keyboard的效果从底 ...

  3. IPhone多视图切换

    处理IPhone多个view切换是我们常遇到的问题,接下来有个比较实用的方法: 而且还附有创建空项目,内存告急处理和动画效果的实现! 具体步骤: 1.创建一个空的项目,然后添加一个ViewContro ...

  4. ios 视图切换翻页效果

    本文写的是视图切换,涉及到的内容有 1.实现代码添加Navigation Bar  Toolbal: 2.实现在Navigation Bar和Toolbar上用代码添加Bar Button Item: ...

  5. [Xcode 实际操作]二、视图与手势-(3)UIView视图的基本操作

    目录:[Swift]Xcode实际操作 本文将实现视图的添加与删除,以及切换视图在父视图中的层次. import UIKit class ViewController: UIViewControlle ...

  6. pushViewController addSubview presentModalViewController视图切换

    1.pushViewController和popViewController来进行视图切换,首先要确保根视图是NavigationController,不然是不可以用的, pushViewContro ...

  7. UI3_视图切换

    // // ViewController.m // UI3_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015年 z ...

  8. UI2_视图切换ViewController

    // // SubViewController.h // UI2_视图切换 // // Created by zhangxueming on 15/7/3. // Copyright (c) 2015 ...

  9. UI1_ViewController视图切换及Appdelegate

    // // ThirdViewController.h // UI1_ViewController视图切换及Appdelegate // // Created by zhangxueming on 1 ...

随机推荐

  1. 使用httperrequest,模拟发送及接收Json请求

    使用httpreques\Json-Handle\tcpdump\wireshark工具进行,抓取手机访问网络的包,分析request及response请求,通过httprequester来实现模拟发 ...

  2. VC常用数据类型使用转换详解

    一.其它数据类型转换为字符串 短整型(int)itoa(i,temp,10);///将i转换为字符串放入temp中,最后一个数字表示十进制itoa(i,temp,2); ///按二进制方式转换 长整型 ...

  3. bind启动时提示953端口被使用

    部署DNS的时候遇到个奇葩的问题,总是提示 couldn't add command channel 0.0.0.0#953: address in use 实际上系统上并没有进程使用953端口.查询 ...

  4. document.body与document.documentElement

    document.body 获取的是body,document.documentElement获取的是html,在任何浏览器上都是如此 相关问题: 1.获取页面滚动条滚动距离 chrome,safar ...

  5. 【servlet】客户端是否可以访问到WEB-INF下的jsp文件

    一般情况下(不考虑出现安全问题被入侵,那样啥都能访问到),WEB-INF下的jsp文件单凭浏览器端请求时访问不到的. 想访问的话需要通过服务端servlet的转发. 下面通过转发和重定向的尝试来观察访 ...

  6. 安装MSYS2过程遇到的问题及解决记录

    1.在安装结束后按照官方教程开始更新系统是遇到了如下的错误 could not open file /var/lib/pacman/sync/msys32.db: Unrecognized archi ...

  7. oracle提高之索引学习

    一. 索引介绍 1.1  索引的创建 语法 : CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema ...

  8. zzuli 1919 数列划分

    题面: Description 晴天想把一个包含n个整数的序列a分成连续的若干段,且和最大的一段的值最小,但他有强迫症,分的段数不能超过m段,然后他就不会分了...他想问你这个分出来的和最大的一段的和 ...

  9. AU3脚本 记录

    编译程序使用自定义图标: #AutoIt3Wrapper_Icon=自定义图标地址 打开指定的网址:(也可以指定其他浏览器exe) Run(@ProgramFilesDir & "\ ...

  10. SELinux(Security-Enhanced Linux)

    http://blog.csdn.net/myarrow/article/details/9839377 Security-Enhanced Linux(SELinux)的历史 一个小历史将有助于帮助 ...