IOS多视图控制器管理的总结与回顾(一)

一、视图控制器常见的切换方式。

 1、Tabbar选项卡:以UITabbarController为容器,以平行的方式管理试图控制器。

          1.1、UITabbarController常用的属性:title---标题,image---图像(需要打开alpha通道,32*32以下,png格式),badgeValue---右上角的图标,viewControllers---所有的子视图控制器。注:UITabbarController在实例化的时候会加载其所有的子视图控制器,如果使用代码方式设置tabbar中的内容,需要在第一个视图控制器中遍历所有的子视图控制器(使用isKindOfClass)。所以当初次进来要显示各个子视图的Badge属性时,应当在第一个视图控制器实例化一下(视图懒加载)。

         应用开发中,在tabbarItem可以设置Badge属性来作为有新信息的提示,同时在Appdelegate的didFinishLaunchingWithObjects方法中,通过设置 [application setApplicationIconBadgeNumber:1000], 则当应用挂在后台时,可以提示有多少条新的信息,就像短信的提示功能那样。

 

 

2、push推送:以UINaviationController为容器,以栈的形势管理子视图控制器。

        2.1这里的栈是先进后出的,UINaviationController始终显示栈顶的视图控制器

        2.2、UINaviationController必须要有一个rootViewController,在该方式下,跳转显示新的控制器时一把都是用 [self.navigationController pushViewController:   animated: ] 方法.

注意:UINaviationController中的返回按钮是懒加载的,所以要设置返回按钮,需要经过以下操作:

        //target和action设置为nil时会默认使用系统自带的操作

        self.navigationItem.backBarButton = [[UIBarButton alloc] initWithTitle:@"返回" style:UIBarButtonItemStyleDone target:nil  action:nil];

        而直接设置[self.navigationItem.backBarButtonItem  setTitle:@"返回"];是不起作用的(因为懒加载的存在)

       2.3 storyboard中segue对象的生命周期:

         (1)、创建目标视图控制器;

         (2)、创建segue对象并且调用他的initWithIdentifier:source destination: 方法,其中的标识符是在Interface Builder中指定的唯一标识字符串,另外两个参数分别对应箭头的起始控制器和目标控制器

        (3)、调用源视图控制器的preparedForSegue:sender:方法,这是使用连线的时候会调用的方法(modal&push)

        (4)、用segue对象的perform方法,负责将目标视图控制器推送到屏幕

        (5)、 释放segue对象

       2.4、重写返回按钮的方法时,在处理操作完成之后需要通过调用[self.navigationController  popViewController animated:] 方法来实现

 

 

 3、model模态:以模态窗口的方式显示新的视图控制器,新视图控制器关闭前,用户无法与原控制器交互,使用storyboard连线时选用的是modal。

      3.1模态窗口是单独使用的窗口,不依赖于容器视图控制器,通常用于显示相对独立的窗口,例如:用户登录,应用程序设置或者帮助信息等,用户在关闭模态窗口前不能与上一级视图进行交互。

      3.2模态视图跳转进入时使用方法[self presentViewController: animated: completion:^{}],退出当前模态视图使用[self dismissViewControllerAnimated: completion:^{}];

      3.3当在storyboard中,如果按钮直接用segue连线到下一个controller的view时,就算将该按钮与controller连线并且写它的点击事件方法,这个方法是不会被调用的,而会调用segue默认的方法直接跳转到下一个页面。所以,要想使该点击事件的方法起效,应该在Interface Builder中直接将两个controller用modal相连,并且将要跳转到的controller 的identifier设置好,同时在代码中用以下操作来跳转:

             [self performSegueWithIdentifier :@"Login" sender:nil];即如果在打开目标控制器前需要做额外的处理,可以使用performSegueWithIdentifier :  sender: 方法。此时,因为storyboard中已经定义了Login的视图控制器,所以不能实例化新的LoginViewController,像下面这样的操作是不能跳转的

            LoginViewController *logon =[ [LoginVIewController alloc init];

           [self presentViewController logon animated:YES];是不会跳转成功的,系统反而会崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值