zoukankan      html  css  js  c++  java
  • 1.0 多控制器管理(附:Demo)

    本文并非最终版本,如有更新或更正会第一时间置顶,联系方式详见文末
    如果觉得本文内容过长,请前往本人 “简书
     
     
     
    控制器 :
     
    • 一个iOS的app很少只由一个控制器组成,除非这个app极其简单
    • 当app中有多个控制器的时候,我们就需要对这些控制器进行管理
    • 有多个view时,可以用一个大的view去管理1个或者多个小view,控制器也是如此,用1个控制器去管理其他多个控制器
    • 比如,用一个控制器A去管理3个控制器B、C、D,控制器A被称为控制器B、C、D的“父控制器”,控制器B、C、D的被称为控制器A的“子控制器”
     
     
    UIViewController的创建:
     
    1.直接代码创建(alloc+init)
    2.通过 Xib 文件创建
    3.通过 storyboard 创建
     
     
    1.1.1 控制器的创建 - alloc+init
    步骤:
     
    AppDelegate.m
     1 #import "AppDelegate.h"
     2 #import "TDViewController.h"
     3 
     4 @interfaceAppDelegate ()
     5 @end
     6 
     7 @implementation AppDelegate
     8  
     9 //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
    10 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    11  
    12   // 1. 实例化UIWindow(特殊的UIView)
    13   self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];
    14  
    15   // 2.alloc init 方法( 实例化视图控制器)
    16   TDViewController *vc = [[TDViewControlleralloc] init];
    17  
    18   self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
    19   [self.windowmakeKeyAndVisible];     // 让窗口变成主窗口并且可见
    20 
    21   returnYES;
    22 }
    23 ……………
    创建一个控制器:TDViewController,继承自 UIViewController
     
    TDViewController.m
     1 #import "TDViewController.h"
     2 
     3 @interfaceTDViewController ()
     4 @end
     5 
     6 @implementation TDViewController
     7 
     8 - (void)viewDidLoad {
     9   [superviewDidLoad];
    10   // Do any additional setup after loading the view.
    11   NSLog(@"你加载的是 TDViewController");
    12 }
    13 ……………

    打印输出:
    2016-01-19 18:44:11.706 UIViewController(alloc+init)[2653:418332] 你加载的是 TDViewController
     
     
     
    1.1.2 控制器的创建 - Xib
    关于报错:
    报错:'-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named “TDView"'
    解决:拖一个view
    报错:'-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "TDView" nib but the view outlet was not set.'
    解决: 在xib 的 File‘s Ower上,绑定class到TDViewController,再右键View连线
     
    步骤:

    创建一个TDView.xib
     
    AppDelegate.m
     1 #import "AppDelegate.h"
     2 #import "TDViewController.h"
     3 
     4 @interfaceAppDelegate ()
     5 @end
     6 
     7 @implementation AppDelegate
     8  
     9 //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
    10 - (BOOL)application:(UIApplication *)application
    11     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    12 
    13   // 1.实例化UIWindow(特殊的UIView)
    14   self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];
    15  
    16   // 2. 加载指定的xib文件
    17   TDViewController *vc =
    18       [[TDViewControlleralloc] initWithNibName:@"TDView"bundle:nil];
    19 
    20   self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
    21   [self.windowmakeKeyAndVisible];     // 让窗口变成主窗口并且可见
    22 
    23   returnYES;
    24 }
    25 ……………
    创建一个控制器:TDViewController,继承自 UIViewController 
     
    TDViewController.m
     1 #import "TDViewController.h"
     2 
     3 @interfaceTDViewController ()
     4 @end
     5 
     6 @implementation TDViewController
     7 
     8 - (void)viewDidLoad {
     9   [superviewDidLoad];
    10   // Do any additional setup after loading the view.
    11   NSLog(@"你加载的是 TDViewController");
    12 }
    13 ……………
     
    打印输出: 
    2016-01-19 19:08:43.400 UIViewController(Xib)[3121:549327] 你加载的是 TDViewController
     
     
     
    1.1.3 控制器的创建 - sb
     
    步骤:

    创建一个TD.storyboard
     
    AppDelegate.m
     1 #import "AppDelegate.h"
     2 #import "TDViewController.h"
     3 
     4 @interfaceAppDelegate ()
     5 @end
     6 
     7 @implementation AppDelegate
     8  
     9 //应用程序启动完成,调用此方法;如果因为内存等原因,应用程序被操作系统干掉,再次点击图标,会调用此方法!
    10 -(BOOL)application:(UIApplication *)application
    11     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    12 
    13   // 1.实例化UIWindow(特殊的UIView)
    14   self.window = [[UIWindowalloc] initWithFrame:[UIScreenmainScreen].bounds];
    15  
    16   // 2. 先加载sb文件(sb 里面的 Class 要指向要创建的控制器的类名)(bundle 传nil 默认就是main bundle)
    17   UIStoryboard *sb = [UIStoryboardstoryboardWithName:@"TD"bundle:nil];
    18  
    19   // 3.接着初始化storyboard中的控制器
    20   // 方法1:初始化“初始控制器”(sb中箭头所指的控制器)<通过加载sb文件来创建控制器的视图,即视图控制器>
    21   TDViewController *vc = [sb instantiateInitialViewController];
    22  
    23   // 方法2:通过一个标识,初始化对应的控制器(需要在sb上的控制器设置 Storyboard ID)
    24   TDViewController *vc = [sb instantiateViewControllerWithIdentifier:@"TD"];
    25 
    26   self.window.rootViewController = vc; // 设置根控制器(把视图控制器添加到window窗口的根视图上)
    27   [self.windowmakeKeyAndVisible];     // 让窗口变成主窗口并且可见
    28    
    29   returnYES;
    30 }
    31 ……………
     创建一个控制器:TDViewController,继承自 UIViewController
     
     
    TDViewController.m
     1 #import "TDViewController.h"
     2 
     3 @interfaceTDViewController ()
     4 @end
     5 
     6 @implementation TDViewController
     7 
     8 - (void)viewDidLoad {
     9   [superviewDidLoad];
    10   // Do any additional setup after loading the view.
    11   NSLog(@"你加载的是 TDViewController");
    12 }
    13 ……………
    打印输出:
    2016-01-19 19:19:53.029 UIViewController(storyboard)[3381:616265] 你加载的是 TDViewController
     
     
     
     Demo 下载:
     https://yunpan.cn/crcML8JCvLjsV (提取码:1fdc)
     
     
     
     
    如果你觉得本篇文章对你有所帮助,请点击右下部“推荐”,^_^
     
     
    作者:蓝田(Loto)
    出处:http://www.cnblogs.com/shorfng/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
     


    如有疑问,请发送邮件至 shorfng@126.com 联系我。
     
    By:蓝田(Loto)
     
     
     
     
     
     
     
  • 相关阅读:
    pl/sql可以封装代码的结构(过程,函数, 包)
    pl/sql 块结构
    Oracle 逻辑模型(数据库,用户的关系)
    Oracle 创建用户为什么要加C##
    CentOS8断电后无法正常启动
    Cannot open /var/log/sa/sa26: No such file or directory
    Centos6.6安装sysstat报错/etc/cron.d
    Oracle DBCA工具检测不到ASM磁盘组
    Redis安装
    Mysql模拟故障恢复案例过程
  • 原文地址:https://www.cnblogs.com/shorfng/p/5143760.html
Copyright © 2011-2022 走看看