IOS-页面跳转与切换

前言

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

使用 UITabBarController

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

使用 UINavigationController 进行页面跳转

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

下面是完整的使用过程:

  1. 首先,我们需要在 AppDelegate 定义一个 UINavigationController 对象:
// AppDelegate.h
@interface AppDelegate (){
    UINavigationController *navC;
    // 这里的 myViewController 是自定义的控制器,继承于 UIViewController
    myViewController *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]];
    
    // 首先实例化 myVC
    myVC = [[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 控件的简单使用流程以及一些坑。


仅供参考,敬请指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值