IOS 基于页面跳转与切换

  • 前言
    • 使用 UITabBarController
    • 使用 UINavigationController 进行页面跳转
    • 使用模态切换进行页面切换
  • 结语

前言

对于稍微复杂一点的 UI,页面跳转都是无法避免的。

使用 UITabBarController

将 UIWindow 的跟控制器指定为 UITabBarController 的实例对象,并为该对象添加多个子控制器,便可以实现底部标签栏的页面切换。
具体使用可以参考本人博客:IOS-底部标签栏换页。

使用 UINavigationController 进行页面跳转

UINavigationController 属于 container view controller 也即容器视图控制器,控制器内部定义了一个栈结构,来按层次对容器内的视图控制器进行组织,实现导航功能。也即页面跳转实际就是出栈和入栈。

下面是完整的使用过程:

  1. 首先,我们需要在 AppDelegate 定义一个 UINavigationController 对象:
// AppDelegate.h
@interface AppDelegate (){UINavigationController *navC;// 这里的 myViewController 是自定义的控制器,继承于 UIViewControllermyViewController *myVC;
}@end
  • 注:花括号中定义实例变量。
  1. 实例化、添加根视图控制器
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];// 首先实例化 myVCmyVC = [[myViewController alloc] init];// 实例化 UINavigationController,同时将 myVC 配置为根视图控制器navC = [[UINavigationController alloc] initWithRootViewController:myVC];// 向窗口添加根控制器[self.window setRootViewController:navC];// 将窗口背景色改为白色self.window.backgroundColor = [UIColor whiteColor];// 套话[self.window makeKeyAndVisible];return YES;
}
  • 在 AppDelegate.m 的 didFinishLaunchingWithOptions 函数中配置我们的 UINavigationController。
  • UINavigationController 本身是没有视图的,我们在实例化时,需要添加一个根视图控制器(如:UIViewController),这时栈中就有了一个元素,并且默认首先显示这个元素。
  1. 最后,通过向容器添加(入栈)新的视图控制器实现页面跳转。注意,本文中,这个页面跳转的操作是在根视图控制器下进行的。
// 实例化跳转页面的视图控制器,anotherViewController 亦为继承于 UIViewController 的自定义控制器
anotherViewController *anoVC = [[anotherViewController alloc] init];
// 使用 pushViewController 添加视图控制器
[self.navigationController pushViewController:anoVC animated:YES];
  • pushViewController 后加上 animated:YES 意为 “立即执行”。
  • 代码执行后,会进行页面跳转,转到新加入的视图控制器的页面。
  1. 有一个需要注意的地方就是跳转后的页面需要配置背景色,因为在 IOS 中,透明背景的处理是一个非常消耗资源的操作,如果跳转后的页面为透明背景,会影响跳转的流畅性。
// 在跳转后页面的视图控制器的 init 函数中,加上这条语句就好了
self.view.layer.backgroundColor = [UIColor whiteColor].CGColor;
// CGColor 是一个很常用的东西,可以将 UIColor 转为 CGColor。基本上背景色,元素的颜色等都必须使用 CGColor,具体什么要转,看 XCode 是否报警就行了
  1. 压栈后,系统自动生成返回的按钮(默认左上角),一般不用我们操心。当然我们也可以使用 popViewController 方法出栈:
    [self.navigationController popViewControllerAnimated: YES];

使用模态切换进行页面切换

从 UINavigationController 的使用中也可以发现,页面的切换其实可以转化为控制器的切换,而模态切换的原理就是对当前展示页面的控制器进行切换。

  • 切换至另一个页面:
// 该函数在当前视图展示 anoVC 控制器带有的视图
[self presentViewController:anoVC animated:YES completion:^{NSLog(@"present成功");}];
  • 切换回原来的页面,需要在切换后的视图控制器中调用 dismissViewControllerAnimated 函数:
// 该函数移除模态切换加入的控制器,显示回原来的视图
[self dismissViewControllerAnimated:YES completion:^{NSLog(@"dismiss成功");}];

一个很经典的使用案例就是进行图片的上传,这里我们可以使用UIImagePickerController,初始化后,调用 presentViewController 显示图片选取视图控制器。然后图片选取完毕后,调用 dismissViewController 返回原视图控制器。
具体使用可以参考本人博客:IOS-图片上传与显示

结语

记录 IOS Objective-C 的 UINavigationController 控件的简单使用流程以及一些坑。


仅供参考,敬请指正。

IOS-页面跳转与切换相关推荐

  1. IOS 页面跳转问题:点击按钮页面不跳转

    问题:每次运行模拟器进入(登录页面->我的页面->注销)没有问题,但是注销后回到登录页面,再点击登录就没有反应了. AppDelegate: LoginViewController *lo ...

  2. ios把数据传递到另一个页面_iOS页面跳转及数据传递(三种)

    iOS页面跳转: 第一种 [self.navigationController pushViewController:subTableViewController animated:YES]; //描 ...

  3. iOS——使用StroryBoard页面跳转及传值

    之前在网上搜iOS的页面跳转大多都是按回以前的那种xib的形式,但鄙人是使用storyboard的.这篇就只介绍利用storyboard进行页面跳转与传值. 新建页面 iOS的程序也是使用了MVC的思 ...

  4. MUI框架开发HTML5手机APP(二)--页面跳转传值底部选项卡切换

    原文链接:   一.MUI加载子页面 1加载子页面详解 在mobile app开发过程中,经常遇到卡头卡尾的页面,也就是说头部和尾部保持不动,而只有中间区域可以滚动,常见的就是新闻列表与详情页等情况: ...

  5. 在没有个人/公司网站的情况下,如何利用同一个二维码自动识别手机系统(Android/IOS)跳转不同下载页面

    一.使用场景 开发了一款App,包括iOS及Android版,到了推广阶段,准备生成二维码让用户扫码下载,那这个二维码该怎么生成?iOS及Andorid各自生成一个二维码让用户区分下载?当然这种方式是 ...

  6. Android app切到后台 返回首页,Android 如何保证App切换到后台,或页面跳转后,重新打开APP、或返回之前页面时,维持其状态不变...

    项目中遇到的一些小问题,记录.分享一下. Android 如何保证App切换到后台,或页面跳转后,重新打开APP.或返回之前页面时,维持其页面状态不变? 1.问:当APP启动后,打开某一界面,然后点击 ...

  7. iOS设备中的推送(三):页面跳转

    ##遇到的问题 如果我们上传了证书,按照极光的开发者文档去设置代码,其实我们会发现,收到一条推送消息并不是想象中的那么遥不可及.但是很快就会发现,我是收到消息了,但是我点击消息打开软件,然后就没了,为 ...

  8. Flutter实现页面跳转切换(路由)

    在移动开发中页面跳转也被称为导航管理,也就是路由,在Flutter中是如何实现的呢 import 'package:flutter/material.dart';///页面跳转 void main() ...

  9. mui几种页面跳转方式对比

    mui几种页面跳转方式对比 http://blog.csdn.net/uikoo9/article/details/44676963 [几种打开页面的方式] 1.初始化时创建子页面 2.直接打开新页面 ...

  10. 微信小程序系列3——页面跳转详解

    前言   首先,微信页面跳转的是一个页面栈进栈出栈的过程,也可以简单的理解对页面跳转的操作就是一个栈的操作. 微信小程序主要一下两类样式的跳转(JS.WXML控件): JS控制的跳转: navigat ...

最新文章

  1. 2021全国高校计算机能力挑战赛(初赛)C语言试题二
  2. UA MATH574 概率论 一个均匀分布的例题2018May/4
  3. asp调用php函数,asp函数split()对应php函数explode()
  4. HTML5中的audio在手机端和微信端的不能自动播放
  5. php 非常有用的高级函数PATH_SEPARATOR常量和set_include_path
  6. js添加关闭功能_微信小程序开发之添加夜间模式功能
  7. MyBatis基于Maven入门实例
  8. layui移动开发_LayUI后台管理与综合示例
  9. 批处理使用完文件后释放_windows 下使用批处理执行 postgresql 命令行操作
  10. php底层深度探索(3) ---Apache启动阶段分析 王泽宾
  11. 【模块】【通信】---http模块中req和res 常用的属性介绍
  12. 145.Binary Tree Postorder Traversal
  13. C++实现 电子邮件客户端程序(简易版)
  14. 废弃qq号大全密码2020_被永久封禁的QQ号解封历程
  15. 服务器蓝屏显示3b,完美解决0x0000003B蓝屏故障的方法
  16. 我眼中的未来计算机作文1000字,我的未来作文1000字
  17. 论文排版1-图片-eps、pdf格式转换
  18. 在word中粘贴的图片为什么显示不完整
  19. 7-172 元宵花灯
  20. 在线视频教育课程网站搭建模板

热门文章

  1. Ionic3 Demo
  2. 搭建属于自己的影视网站
  3. 服务器显示共享文件夹的图标,Win7共享文件夹上的小锁图标怎么关闭?
  4. flask-SQLAlchemy数据库密码加密
  5. Python-Level2-day04:正则表达式概述,元字符使用,匹配规则(特殊字符匹配,贪与非贪婪模式,分组),re模块使用
  6. Lucene Automaton(二)
  7. 互联网时代架构师的职责与思考
  8. android开发利器--站在巨人肩膀上前行
  9. java程序控制马达_java控制步进电机
  10. uvm transaction