导航控制器及其跳转方式小结

作者: 爱民谣的coderMrZhou | 来源:发表于2016-10-19 11:48 被阅读0次

在平时开发中,利用导航控制器进行push和pop完成界面的跳转,是最常见的一种方式。今天就对导航控制器的一些知识盲点进行了一个小结。

首先, 对下面三个类的比较:

UINavigationBar :继承至UIView,NavigationBar就是导航栏,位于屏幕的上方,管理整个NavigationController的navigationItem,即类似navigationcontroller一样提供了一个栈来管理item。

UINavigationItem : 继承至NSObject,通过这个属性来设置title ,leftBarButtonItem,titleView,,rightBarButtonItem,backBarButonItem 等。

UIBarButtonItem :继承至UIBarItem,UIBarItem继承至UIButton。专门用来放在UIToolbar 或者 UINavigationBar的特殊button。

另外,UINavigationBar的两个属性进行了比较:

1. topViewController 栈顶的控制器

2. visibleViewController 当前屏幕上可见的viewController,包括modal出来的controller

NSArray *stackViewControllers =self.navigationController.viewControllers;

区别:topViewController一定是栈中的控制器,在stackViewControllers数组中。而如果在某个push完成的controller中present出一个viewController2,此时topViewController还是viewController,而visibleViewController就变成viewController1了。

关于通过导航控制器的跳转方式:

一.push

二.pop(1.逐级pop 2.跳跃式pop 3.pop到栈底)

下面是跳转到上一级controller并回传参数的代码:

- (void)setPopItem{

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回到上一级" style:UIBarButtonItemStylePlain target:self action:@selector(pop)];

}

- (void)pop{

NSArray *viewControllers = self.navigationController.viewControllers;

NSInteger preVCIndex = viewControllers.count - 2;

NSLog(@"栈底%@,栈顶%@",[viewControllers firstObject],[viewControllers lastObject]);

if (preVCIndex >= 0) {

UIViewController *preVC = [self.navigationController.viewControllers objectAtIndex:preVCIndex];

if ([preVC isKindOfClass:[RemindViewController class]]) {

RemindViewController* vcn1 = (RemindViewController *) preVC;

vcn1.popInt = 3; // 传参

}

[self.navigationController popToViewController:preVC animated:YES];

}

}

总结: int count = self.navigationController.viewControllers.count;

viewControllers数组中从index=0到index =count-1对应着栈底到栈顶的controller。如firstObject对应数组中第一个元素,即栈底的控制器:lastObject对应对应数组中最后一个元素,就是当前正在屏幕上显示的栈顶的controller。

相关文章

  • 导航控制器及其跳转方式小结

    在平时开发中,利用导航控制器进行push和pop完成界面的跳转,是最常见的一种方式。今天就对导航控制器的一些知识盲...

  • iOS项目中常见的控制器跳转

    iOS控制器有两种跳转方式:1.模态跳转2.导航控制器跳转 1.模态跳转 dismissViewControlle...

  • 47-Swift 之控制器之间的跳转

    一 、 App开发中控制器之间的跳转有哪些方法? 》1 、导航跳转》2、模态跳转 二 、导航跳转 & 模态跳...

  • 导航控制器

    导航控制器 多控制器的跳转 导航控制器view的结构 导航条y:20H:44 存放栈顶控制器的view 导航控制器...

  • iOS-总结Demo--Push、Pop 、Present、Di

    小结一下跳转页面的动画效果实现思路!代码移步GitHub 总结的转场动画是下面几个情况: 导航控制器的 Push ...

  • Swift3.0 循环引用

    //创建一个导航栏控制器,控制器跳转跳转的controller内容如下---以下代码内容为循环引用

  • iOS笔记-导航控制器(Nav)的10条经验

    1.导航控制器永远显示的是栈顶控制器的view 2.导航控制器中做界面之间的跳转必须取到导航控制器 3.调用pop...

  • navigation's skills

    navigation技巧 [A].获取 导航栏所有的视图控制器 获取 导航栏所有的视图控制器,选择想要跳转的那个视...

  • 模态跳转和导航push

    使用模态跳转的动画push导航控制器: //方法一:模态跳转,前提是利用navigationcontroller这...

  • 知识点总结27:app加载网页

    1.拿到当前控制器的导航控制器进行网页的跳转,可以转化为拿到当前窗口根控制器的选中的NavVC控制器来跳转 拿到当...

网友评论

    本文标题:导航控制器及其跳转方式小结

    本文链接:https://www.haomeiwen.com/subject/qsvgyttx.html