zoukankan      html  css  js  c++  java
  • iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇—多控制器和导航控制器简单介绍

    一、多控制器

    一个iOS的app很少只由一个控制器组成,除非这个app极其简单。当app中有多个控制器的时候,我们就需要对这些控制器进行管理

    有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器

    比如,用一个控制器A去管理3个控制器B、C、D。控制器A被称为控制器B、C、D的“父控制器”;控制器B、C、D的被称为控制器A的“子控制器”

    为了便于管理控制器,iOS提供了2个比较特殊的控制器

    UINavigationController

    UITabBarController

    二、导航控制器

    利用UINavigationController,可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型例子就是系统自带的“设置”应用

    如图:

    三、UINavigationController的使用步骤

    (1)初始化UINavigationController

    (2)设置UIWindow的rootViewController为UINavigationController

    (3)根据具体情况,通过push方法添加对应个数的子控制器

    复制代码
     1 #import "YYAppDelegate.h"
     2 #import "YYOneViewController.h"
     3 
     4 @implementation YYAppDelegate
     5 
     6 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
     7 {
     8     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
     9     self.window.backgroundColor = [UIColor whiteColor];
    10     
    11     //1.创建一个导航控制器
    12     UINavigationController *nav=[[UINavigationController alloc]init];
    13     //2.设置导航控制器为window的根视图
    14     self.window.rootViewController=nav;
    15 
    16     
    17     //3.添加子控制器到导航控制器中
    18     //创建一些控制器
    19     UIViewController *c1=[[UIViewController alloc]init];
    20     //设置c1这个控制器的视图颜色
    21     c1.view.backgroundColor=[UIColor redColor];
    22     
    23     UIViewController *c2=[[UIViewController alloc]init];
    24     c2.view.backgroundColor=[UIColor purpleColor];
    25     
    26     UIViewController *c3=[[UIViewController alloc]init];
    27     c3.view.backgroundColor=[UIColor brownColor];
    28     
    29 //把这些控制器添加到导航控制器中
    30     [nav pushViewController:c1 animated:YES];
    31     [nav pushViewController:c2 animated:YES];
    32     [nav pushViewController:c3 animated:YES];
    33     
    34     [self.window makeKeyAndVisible];
    35     return YES;
    36 }
    复制代码

    运行模拟器,可以看到一个简陋的有着三个子控制器管理着页面。

    但呈现在我们眼前的只能有一个界面,我们没有必要一次性创建三个控制器在这里等着。

    要求:创建三个子控制器,每个子控制器view的界面上放一个按钮,点击可以跳转到下一个界面。

    实现(完成三个页面间通过按钮进行简单的跳转):

    说明:这里把第一个子控制器的创建等代码写在了代理方法中。

    YYAppDelegate.m文件代码

    复制代码
     1 //
     2 //  YYAppDelegate.m
     3 //  01-导航控制器的使用1
     4 //
     5 //  Created by apple on 14-6-4.
     6 //  Copyright (c) 2014年 itcase. All rights reserved.
     7 //
     8 
     9 #import "YYAppDelegate.h"
    10 #import "YYOneViewController.h"
    11 
    12 @implementation YYAppDelegate
    13 
    14 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    15 {
    16     self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    17     self.window.backgroundColor = [UIColor whiteColor];
    18     
    19     //1.创建一个导航控制器
    20     UINavigationController *nav=[[UINavigationController alloc]init];
    21     //2.设置导航控制器为window的根视图
    22     self.window.rootViewController=nav;
    23 
    24     
    25     //3.添加子控制器到导航控制器中
    26     YYOneViewController *one=[[YYOneViewController alloc]init];
    27     [nav pushViewController:one animated:YES];
    28     
    29     [self.window makeKeyAndVisible];
    30     return YES;
    31     
    32     
    33 //    //创建一些控制器
    34 //    UIViewController *c1=[[UIViewController alloc]init];
    35 //    //设置c1这个控制器的视图颜色
    36 //    c1.view.backgroundColor=[UIColor redColor];
    37 //    
    38 //    UIViewController *c2=[[UIViewController alloc]init];
    39 //    c2.view.backgroundColor=[UIColor purpleColor];
    40 //    
    41 //    UIViewController *c3=[[UIViewController alloc]init];
    42 //    c3.view.backgroundColor=[UIColor brownColor];
    43 //    
    44 ////把这些控制器添加到导航控制器中
    45 //    [nav pushViewController:c1 animated:YES];
    46 //    [nav pushViewController:c2 animated:YES];
    47 //    [nav pushViewController:c3 animated:YES];
    48 }
    复制代码

    创建三个子控件类及对应的xib文件

    YYOneViewController.m文件

    复制代码
     1 //
     2 //  YYOneViewController.m
     3 //  01-导航控制器的使用1
     4 //
     5 //  Created by apple on 14-6-4.
     6 //  Copyright (c) 2014年 itcase. All rights reserved.
     7 //
     8 
     9 #import "YYOneViewController.h"
    10 #import "YYTwoViewController.h"
    11 
    12 @interface YYOneViewController ()
    13 /**
    14  跳转到第二个界面
    15  */
    16 - (IBAction)jump2two:(id)sender;
    17 
    18 @end
    19 
    20 @implementation YYOneViewController
    21 
    22 
    23 - (IBAction)jump2two:(id)sender {
    24     //1.创建第二个子控制器
    25     YYTwoViewController *two=[[YYTwoViewController alloc]init];
    26     
    27     //2.把子控制器添加到导航控制器中
    28     //有什么办法能够拿到导航控制器?
    29      //只要当前控制器是导航控制器的子控制器,那么就可以通过该属性直接获取到当前控制器所在的导航控制器
    30     [self.navigationController pushViewController:two animated:YES];
    31 }
    32 @end
    复制代码

    YYTwoViewController.m文件

    复制代码
     1 //
     2 //  YYTwoViewController.m
     3 //  01-导航控制器的使用1
     4 //
     5 //  Created by apple on 14-6-4.
     6 //  Copyright (c) 2014年 itcase. All rights reserved.
     7 //
     8 
     9 #import "YYTwoViewController.h"
    10 #import "YYThreeViewController.h"
    11 @interface YYTwoViewController ()
    12 - (IBAction)jump2Three:(id)sender;
    13 
    14 @end
    15 
    16 @implementation YYTwoViewController
    17 
    18 //跳转到第三个子控制器
    19 - (IBAction)jump2Three:(id)sender {
    20     //1.创建第三个子控制器
    21     YYThreeViewController *three=[[YYThreeViewController alloc]init];
    22     //2.将子控制器添加到导航控制器中
    23     [self.navigationController pushViewController:three animated:YES];
    24     
    25 }
    26 @end
    复制代码

    提示:只要当前控制器是导航控制器的子控制器,那么就可以通过self.navigationController属性直接获取到当前控制器所在的导航控制器

    项目文件结构和运行效果:

     
  • 相关阅读:
    查看端口有没有被占用
    微信公众号2()
    How to insert a segment of noise to music file
    puppet practice
    Docker Commands
    LempelZiv algorithm realization
    The algorithm of entropy realization
    Java network programmingguessing game
    Deploy Openstack with RDO and Change VNC console to Spice
    puppet overview
  • 原文地址:https://www.cnblogs.com/YDBBK/p/4875154.html
Copyright © 2011-2022 走看看