UINavigationController-03出栈操作
作者:
js_huh | 来源:发表于
2020-08-23 11:50 被阅读0次出栈操作
-
popViewControllerAnimated:
返回上一级
-
popToRootViewControllerAnimated:
返回根控制器
-
popToViewController: animated:
返回到指定的子控制器
-
通过示例,来熟悉出栈的几个方法
-
分析
- 层级:"红色(第1层) -->黄色(第2层)-->绿色(第3层)-->桔色(第4层)"
- 各个层级
- 点击"下一级控制器"按钮,
- pushViewController: animated:
(入栈操作)
- 点击"控制器数量"按钮,打印
navigationController - 导航控制器
里面有多少子控制器!
验证: 是否将子控制器添加到"导航控制器"里面。(入栈)
- 绿色的控制器
- 桔色的控制器,
- 点"返回指定控制器"按钮,切换到黄色控制器
- 点"返回根控制器"按钮,切换到红色控制器
-
示例代码
-
OneViewController - 红色控制器
-- 下一级控制器
- (IBAction)btnNextClick:(id)sender {
TwoViewController *twoVC = [[TwoViewController alloc]init];
[self.navigationController pushViewController:twoVC animated:YES];
}
-- 打印控制器的数量
- (IBAction)btnNumClick:(id)sender {
NSLog(@"self.childVC= %@",self.navigationController.childViewControllers);
}
-
ThreeViewController - 绿色控制器
-- 返回上一级控制器.-'返回黄色控制器'
- (IBAction)btnThreeReturnClick:(id)sender {
[self.navigationController popViewControllerAnimated:YES];
}
-
FourViewController - 桔色控制器
-- 返回到指定的控制器,'dataVC[1] -- 也就是黄色控制器'
- (IBAction)btnReturnToClick:(id)sender {
-- 获取导航控制器里,所有的子控制器。
NSArray<UIViewController *>* dataVC = self.navigationController.childViewControllers;
[self.navigationController popToViewController:dataVC[1] animated:YES];
-- ❌ 以下是错误示范:
必须是已经在导航控制器里面的子控制器,才能切换.
新创建的控制器,无法切换,因为在导航控制器里面找不到。
OneViewController *oneVC = [[OneViewController alloc]init];
[self.navigationController popToViewController:oneVC animated:YES];
}
-- 返回到根目控制器
- (IBAction)btnReturnRootClick:(id)sender {
[self.navigationController popToRootViewControllerAnimated:YES];
}
- 注意:
-
出栈做了哪些操作?
- 销毁"导航控制器"里的子控制器
- 注意:
它是先将要销毁子控制器,集中在一个栈里,
然后再删除。
- 假设当前控制器是"桔色控制器",更加上面"层级所示"那么内部,应该是这样得.
- 此时,点击"返回根控制器",按照一般来讲.销毁顺序:
"桔色控制器 -->绿色控制器 -->黄色控制器", 可实际销毁顺序:
"黄色控制器 -->绿色控制器 -->桔色控制器".这是因为:
- 把子控制器,集中在一个栈里,然后再销毁.
本文标题:UINavigationController-03出栈操作
本文链接:https://www.haomeiwen.com/subject/dqnvjktx.html
网友评论