UINavigationController

7.8.1 添加子控制器进栈

UINavigationController *nav = [[UINavigationController alloc] init];

CTOneViewController *one = [[CTOneViewController alloc] init];

//方法一

[nav pushViewController:one animated:YES];

//方法二

[nav addChildViewController:one];

//方法三

nav.viewControllers = @[one];

//方法四

[nav showViewController:one sender:nil];

7.8.2 子控制器出栈

//方法一:撤销当前栈顶控制器,返回上一个控制器

[self.navigationController popViewControllerAnimated:YES];

//方法二:popToViewController撤销到指定控制器,只能传递栈中控制器

CTTwoViewController *vc = self.navigationController.viewControllers[1];

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

//方法三:直接返回到栈底控制器

 [self.navigationController popToRootViewControllerAnimated:YES];
 
7.8.3 navigationItem创建

UIBarButtonItem *buttonItem1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay target:selfaction:@selector(Back:)];

UIBarButtonItem *buttonItem2 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"zhongguo"] style:UIBarButtonItemStyleDone target:self action:@selector(Back:)];

UIBarButtonItem *buttonItem3 = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:selfaction:@selector(Back:)];

7.8.4 leftBarButtonItems创建

self.navigationItem.leftBarButtonItem = buttonItem1;

self.navigationItem.leftBarButtonItems = @[buttonItem1, buttonItem2, buttonItem3];

7.9 UIStoryboardSegue
1. Segue的三个属性

@property (nonatomic, readonly) NSString *identifier;//唯一标识

@property (nonatomic, readonly) id sourceViewController;//来源控制器

@property (nonatomic, readonly) id destinationViewController;//目标控制器

2. Segue分为手动型和自动型两种,在storyboard中操作,按钮直接连线到控制器的是自动型,控制器连线到控制器的是手动型。无论如何都需要跳转的,用自动型segue。条件判断后才需要跳转的,用手动型segue。
3. 手动型segue调用
1) 首先需要在storyboady中,将手动segue的identifier命名

2) 然后调用如下方法:

[self performSegueWithIdentifier:@"login2contacts" sender:nil];

4. 无论是手动型segue,还是自动型segue,执行前都会调用prepareForSegue方法,我们在此方法中进行2个控制器间的传值。

//直接赋值

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

CTContactsTableViewController *contact = segue.destinationViewController;

contact.navigationItem.title = [NSString stringWithFormat:@"%@的通讯录", self.textAccount.text];

}

//在执行跳转前,当前控制器在调用prepareForSegue方法后成为目标控制器的代理

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

CTAddViewController * addViewController = (CTAddViewController *)segue.destinationViewController;

addViewController.delegage = self;

}

//实现目标控制器代理中的方法,可获取数据并触发相应的操作

- (void)addViewControllerBtnSave:(CTAddViewController *)addViewController

{

CTContact *contact = addViewController.contact;

[self.contacts addObject:contact];

 
}

如果需要在跳转页面的时候,做一些操作效果,可以自定义导航控制器重写push或者pop方法(重写这个方法,也可以取消一些不想要的效果),或者作为导航控制器的代理,监听跳转方法。

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController*)viewController animated:(BOOL)animated

iOS-UINavigationController多控制器管理的更多相关文章

  1. iOS开发 - UIViewController控制器管理

    创建一个控制器 控制器常见的创建方式有下面几种 //通过storyboard创建 //直接创建 ViewController *vc = [[ViewController alloc] init]; ...

  2. IOS UINavigationController 导航控制器

    /** 导航控制器掌握: 1.创建导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootVie ...

  3. UINavigationController 子控制器管理原理

    UINavigationController 显示在导航控制器上的控制器 永远是栈顶控制器 后进先出  先进后出原则 /** * 程序获得焦点才能获取触摸事件 * */- (void)applicat ...

  4. iOS之多控制器管理--项目中的常见文件

    项目中的常见文件 内容大纲: 1.LaunchScreen 2.info.plist文件 3.pch文件 1.LaunchScreen xcode5和xcode6区别 1.xcode6没有Framew ...

  5. iOS:iOS中的多控制器管理

    iOS中的控制器有三种创建方式: 1.通过storyboard创建 UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@" ...

  6. 控制器管理UINavigationController、UINavigationBar

    控制器管理 掌握 控制器以及view的多种创建方式 UINavigationController的简单使用:添加\移除子控制器 UINavigationBar内容的设置 控制器的生命周期方法 Segu ...

  7. AJ学IOS(23)UI之控制器管理

    AJ分享,必须精品 控制器以及view的多种创建方式 控制器view的加载 通过storyboard创建 1:先加载storyboard⽂件(Test是storyboard的⽂文件名) UIStory ...

  8. [iOS基础控件 - 6.11.2] - UINavigationController 多控制器 简单使用

    A.概念 1.通常一个app有多个控制器 2.需要对这些控制器进行管理 3.有多个view的时候,用一个父view去管理多个子view 4.控制器管理也是如此,使用给一个父控制器,去控制子控制器   ...

  9. iOS UINavigationController Class Translation

    类   UINavigationController 一个容器视图控制器,定义了用于导航分层内容的基于堆栈的方案.   概述   导航控制器是一个在导航界面中,管理一个或多个子视图控制器的容器视图控制 ...

  10. iOS 控制单个控制器旋转

    iOS 控制单个控制器旋转 控制单个ViewController 的旋转 //不旋转,保持竖屏 //iOS 5 - (BOOL) shouldAutorotateToInterfaceOrientat ...

随机推荐

  1. CSP-S 2019 第二轮 退役记

    Day 0 复习数论,复习网络流,复习动态DP,复习ac自动机,复习后缀自动机- Day 1 进考场,得到解压密码,跟时事热点没有什么关系. 感觉键盘有点难受,右半部分包括退格.方向键.回车都比较黏. ...

  2. Number of Islands II

    Given a n,m which means the row and column of the 2D matrix and an array of pair A( size k). Origina ...

  3. Laravel Model updating&updated 事件使用注意事项

    1 触发条件 1.1 updating 1.1.1 如果字段无变化,不会触发此事件. 1.1.2 除非更改至少一个字段的值 2 事件逻辑不会覆盖 2.1 Trait 中定义事件如下 /** * The ...

  4. leetcode解题报告(21):Majority Element

    描述 Given an array of size n, find the majority element. The majority element is the element that app ...

  5. BZOJ4406 WC2016 论战捆竹竿

    Problem BZOJ Solution 显然是一个同余系最短路问题,转移方案就是所有|S|-border的长度,有 \(O(n)\) 种,暴力跑dijkstra的复杂度为 \(O(n^2\log ...

  6. 【原创】go语言学习(十五)IO操作2

    目录 文件打开和读写 读取压缩文件 bufio原理和cat命令实现 defer详解 文件打开和读写 1. 文件是存储在外部介质上的数据集合. A. 文件分类:文本文件和二进制文件 B. 文件存取方式: ...

  7. 列出python中可变数据类型和不可变数据类型,并简述原理

    可变类型(mutable):变量进行append.+=等这种操作后 == 改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即 ...

  8. zookeeper 随记

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务. zookeeper的几种模式: 1.单点模式 2.分布式集群模式,节点运行在多台机器 3.单点多实例 在这里只介绍单点多实例安装. ...

  9. mysql的 UUID的生成方式

    之前一直用的  int 自增的方式,之后总觉得缺少自信.  之后,我觉得采用uuid的方式,可能会好一些,至于用户统计排序等,则另用属性进行记录.   这里设计到一对矛盾:  安全性 与  网络带宽利 ...

  10. node.js 文件下载

    //下载参数 var http = require("http"); var fs = require("fs"); var path = require(&q ...