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属性直接获取到当前控制器所在的导航控制器

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

  • 相关阅读:
    Codeforces 1485C Floor and Mod (枚举)
    CodeForces 1195D Submarine in the Rybinsk Sea (算贡献)
    CodeForces 1195C Basketball Exercise (线性DP)
    2021年初寒假训练第24场 B. 庆功会(搜索)
    任务分配(dp)
    开发工具的异常现象
    Telink MESH SDK 如何使用PWM
    Telink BLE MESH PWM波的小结
    [LeetCode] 1586. Binary Search Tree Iterator II
    [LeetCode] 1288. Remove Covered Intervals
  • 原文地址:https://www.cnblogs.com/dondre/p/4093322.html
Copyright © 2011-2022 走看看