、最普通的视图控制器UIViewContoller

  一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有两种方法。

  1、通过方法 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion跳转

  相信很多人都用过这个方法,他是所有视图控制器对象都有的成员方法。基本绝大部分情况下,这个成员方法都可以正常使用,不过有些时候可能会使用失败,失败一般的原因都是,同一个视图控制器,在同一个时间,只能present一个另外的视图控制器,如果当前的VC已经present了,再次present一个VC时,就会提示失败,具体的失败提示在log里面有,我忘了就不说了,如果想继续present,就必须将原来present的控制器dismiss。

  说到这里,再延伸下控制器的两个可能很多人都没注意的两个只读属性:presentedViewController和presentingViewController,他们分别是被present的控制器和正在presenting的控制器。比如说, 控制器A和B,[A presentViewController B animated:YES completion:nil]; 那么A相对于B就是presentingViewController,B相对于A是presentedViewController,即这个时候  

    B.presentingViewController = A;

    A.presentedViewController = B;

  这两个属性,在有些时候,用起来是很方便的。比如说,现在有个C界面,C界面被显示出来,可能有两种情况,一是modal出来的,另外一种是push出来的,这时候就可以通过当前界面对象的presentingViewController属性来判断到底属于哪种情况,如果是nil,表示是UINavigationController对象push过来的,如果不是则是modal过来的。

  2、通过方法 - (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender跳转

    如果代码要用这种方式,首先要创建一个UIStoryboardSegue对象,并给初始化相应的值。UIStoryboardSegue类有哪些方法和属性,去看看官方文档就明白了,我这里就不多说了。

    UIStoryboardSegue对象,提供了 跳转源界面,跳转目的界面,以及一个identifier也就是上面的identifier了,相信这么一说大家就知道这个类是干嘛的了。

    不过我没用代码这么写过,一般用这种方法跳转,我都是在storyboard里面直接根据所给的identifier来写的,也就是我们在storyboard中不同界面间拉的线(也就是UIStoryboardSegue)的属性中写的。

    这种方法同时也支持UINavigationController的跳转,不过跳转的模式为push了,它只能在当前视图控制器是UINavigationController时才能用。

  上述两种方式,都是通过 dismissViewControllerAnimated 来返回前一个界面的。

二、导航控制器UINavigationController

  1、pushViewController    推出某个视图控制器

  需要注意的是,这个方法,是UINavigationController和其子类才有的方法,普通的控制器是没有的。 所以用得时候一般是某个aNavigationController pushViewcontroller或者self.navigationController pushViewController。

  2.通过上面所述的performSegueWithIdentifier方法跳转,就不多说了。

    

  由于UINavigationController是一个视图控制器的容器,他里面可能放了很多个控制器,所以返回的时候可以分为几种情况。

  A:弹出当前显示的界面,也就是返回到上个界面, popViewController(注意,当当前界面是根结面时,这个方法是不起作用的)。

  B:返回到控制器的根结面,popToRootViewController。

  C:跳转到这个视图控制器的中间的某个界面。popToViewController。用这种方式,就需要知道跳转到哪个界面了,获取需要跳转的界面的方式有很多,我一般是遍历UINavigationController的viewControllers数组,用iskindofclass方法来获取某个控制器对象再来跳转的。

三、UITabBarController

  tabbar控制器,相信大家也用的很多,一般作为app的根界面视图控制器。其实与其说UITabBarController的界面跳转,不如说是界面切换,因为UITabBarController的界面跳转其实就是UITabBarController的viewControllers数组中的几个界面切换。只要设置好了UITabBarController的viewControllers数组,切面的切换基本就没我们什么事儿了。

四、补充一点 :通过子界面实现同个控制器下的界面切换。

  我们开发中,可能会遇到某个界面比较复杂,要进行多个界面的切换,如果把这些界面切换全都放在该界面中,控制器代码非常臃肿不说,控制起来也比较麻烦,这个时候我建议用不同的控制器来表示不同的界面,然后将这些界面通过addChildViewController添加到控制器的子控制器中,然后通过系统提供的方法进行切换,至于这种方法怎么用,大家看下官方文档就知道了。

  这种方法通常会和UISegmentController配合使用。

  ps:本人接触ios时间也不是很长,写博客一个目的是为了和大家分享,另外一个是促进自己进步,所以不足和错误的地方,欢迎大家指教和拍砖,但是请不要喷人。

iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法的更多相关文章

  1. [转]iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    参考:http://www.mamicode.com/info-detail-469709.html 一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能( ...

  2. 浅谈PHP代码设计结构

    浅谈PHP代码设计结构 您的评价:       还行  收藏该经验       coding多年,各种代码日夜相伴,如何跟代码友好的相处,不光成为职业生涯的一种回应,也是编写者功力的直接显露. 如何看 ...

  3. 李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView

    李洪强iOS开发之后使用纯代码实现横向滚动的UIScrollView (VTmagic是一个实现左右滚动的控制器的框架,也可以实现此功能) 实现的效果:  01 - 创建四个控制器 02 - 定义需要 ...

  4. 浅谈android代码保护技术_ 加固

    浅谈android代码保护技术_加固 导语 我们知道Android中的反编译工作越来越让人操作熟练,我们辛苦的开发出一个apk,结果被人反编译了,那心情真心不舒服.虽然我们混淆,做到native层,但 ...

  5. ios 导航视图控制器 跳转

    import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoa ...

  6. 利用来JS控制页面控件显示和隐藏有两种方法

    利用来JS控制页面控件显示和隐藏有两种方法,两种方法分别利用HTML的style中的两个属性,两种方法的不同之处在于控件隐藏后是否还在页面上占空位. 方法一:  1 2 document.getEle ...

  7. IOS中 浅谈iOS中MVVM的架构设计与团队协作

    今天写这篇文章是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇文章的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. iOS开发——OC篇&纯代码退出键盘

    关于iOS开发中键盘的退出,其实方法有很多中,而且笔者也也学会了不少,包括各种非纯代码界面的退出. 但是最近开始着手项目的时候却闷了,因为太多了,笔者确实知道有很多中方法能实现,而且令我影响最深的就是 ...

  9. iOS:删除storyBoard,纯代码实现UITabBarController的视图切换功能

    storyboard是一个很强大的编写代码的辅助工具,可以帮助布局多个视图之间的联系,既直观又能减少代码量:但是,作为一个程序员,在不使用storyboard的情况下,纯代码编写是必须的技能. 下面就 ...

随机推荐

  1. 个人作业2——英语学习APP的案例分析

    第一部分:调研.评测 1.刚刚打开必应词典的时候,它给我的第一反应就是界面美观,最上面是一个查询框,下面有一些经典的句子.单词以及一些精选的文章,所有的功能都可以一目了然,看一眼就知道要怎么去使用,这 ...

  2. 团队作业10--事后分析(Beta版本)

    设想和目标 1. 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件的作用是帮助用户实现准确快速的电子文档查重,我们对软件的定义是电子文档查重系统,即通过文 ...

  3. 201521123050《Java程序设计》第2周学习总结

    本周学习总结 (1)掌握各种数据类型的使用 基本类型 整数类型(byte,short,int,long,char) 浮点类型(float,double) boolean类型(true, false) ...

  4. Easyui DataGrid DateRange Filter 漂亮实用的日期区间段筛选功能

    自定义扩展Jquery easyui datagrid filter组件实现对日期类型区间段的筛选功能.显示效果如一下 是不是非常实用 引用的jquery 组件是 Date Range Picker ...

  5. WPF(C#) 矩阵拖动、矩阵动画、边缘展开动画处理。

    最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行 ...

  6. Spring第三篇【Core模块之对象依赖】

    前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...

  7. Hibernate @Embeddable注释

    在hibernate中实现自定义类型,只要实现UserType接口即可或者以Component的形式提供.JPA的@Embedded注释可以在你的Entity中使用一般的Java对象,此对象需要用@E ...

  8. python 实现登录程序

    本文介绍一个用python 实现的登录程序.python新手们可以参考一下. 用户信息存放于一个文件中,需要引入文件,校验输入的用户名.密码是否跟用户列表中的用户名密码相匹配,如果匹配,这登录成功,否 ...

  9. JVM菜鸟进阶高手之路十二(jdk9、JVM方面变化, 蹭热度)

    转载请注明原创出处,谢谢! 经过 4 次跳票,历经曲折的 Java 9 正式版终于发布了!今天看着到处都是jdk9发布了,新特性说明,心想这么好的蹭热度计划能错过嘛,哈哈,所以就发了这篇文章. 目前j ...

  10. angular 如何获取使用filter过滤后的ng-repeat的数据长度

    在做项目的过程中,被产品要求在内容为空的过程中显示提示信息,然哦户内容使用ng-repeat循环输出的,并且使用了filter过滤.后在谷歌上找到解决方案,如下: ​之前代码如下显示: <ul& ...