zoukankan      html  css  js  c++  java
  • IOS学习笔记 ---- 15/09/01

    1.创建控制器的三种方式:

    1. 单纯的alloc init
      1 MyViewController *myvc = [[MyViewController alloc] init];
      2 self.window.rootViewController = myvc;
    2. 加载storyboard的方式
      1 MyStoryboard *storyboard = [MyStoryboard storyboardWithName:@"myBoard" bundle:nil];
      2 MyViewController *myvc = [storyboard instantiateViewControllerWithIdentifier:@"myController"];
      3 self.window.rootViewController = myvc;
    3. 加载xib的方式(该方法在创建完成后需要在xib界面将File's Owner设置成MyViewController类并且右键拖线将View设置为想显示的View窗口)
      1 MyViewController *myvc = [[MyViewController alloc] initWithNibName:@"MyNib" bundle:nil];
      2 self.window.rootViewController = myvc;

    2.程序启动时会去寻找Main Interface,如果找到Main Interface则会自动加载默认的storyboard,加载的过程大致为以下几步:

    1.  先将self.window alloc并且initWithFrame或者init然后给frame属性赋值;
    2. 声明一个新的UIStoryboard对象并且指向[UIStoryboard storyboardWithName:@"Main" bundle:nil];
    3. 给window的根控制器rootViewController赋值[storyboard instantiateInitialViewController];
    4. 使用[self.window makeKeyAndVisible]显示window;

    3.storyboard加载后使用instantiateViewControllerWithIdentifier:@"storyboardId"方法也可以获得storyboard的ViewController对象。

    4.同样可以使用alloc init创建控制器对象然后设置为根控制器的方式来显示页面,但是添加控件就必须使用代码了。

    5.storyboard需要主动加载,即使storyboard设置为MyViewController,如果通过alloc init创建ViewController而不是通过加载storyboard,那么storyboard(包括其中的控件)不会自动进行加载。

    6.下图为参考,如果MyViewController实现了loadView方法,则会执行loadView中的方法而不去加载storyboard或者xib文件(在加载文件之前),如果没有实现,再去寻找storyboard或者与nibName对应的xib,找不到nibName的时候会先去找与控制器类名去除Controller后相同文件名的xib文件,如果还未找到则找与控制器类名完全相同的xib文件。

    7.在调用[self.window makeKeyAndVisible]方法的时候会因为要显示window,然后会调用window的根控制器,然后调用根控制器的view,因为是懒加载,如果之前设置了myvc.view的某些属性,则当时就会立即去绘制view,成功绘制出View后会调用viewDidLoad方法(此过程中只会调用一次)。另一张图可能会更加清楚些,不过下图忽略了xib。

    8.通过使用UINavigationController的pushViewController方法可以做到界面的跳转,最后push进去的则最先显示。(用栈来说的话,就是出栈,销毁栈顶的控制器以及View,显示新栈顶的View)

    9.四种方法实现给NavigationContoller添加子控件:

    1. 调用pushViewController方法;
    2. 调用addChildViewController方法;
    3. 给viewControllers赋予新数组并在其中添加ViewController;
    4. 在alloc后不使用init而是使用initWithRootViewController方法;

    10.进栈与出栈的方法

     1 // 使用push方法能让某个控制器进栈
     2 - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
     3 
     4 // 使用pop方法可以出栈
     5 
     6 // 将栈顶的控制器移除
     7 - (UIViewController *)popViewControllerAnimated:(BOOL)animated;
     8 
     9 // 回到指定的子控制器
    10 - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
    11  
    12 // 回到根控制器(栈底控制器)
    13 - (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
    进栈和出栈

    11.栈顶ViewController的navigationBar返回按钮是由次栈顶的ViewController中的backBarButtonItem决定的。只要对次栈顶的BackBarButtonItem进行赋值UIBarButtonItem就可以修改返回键的标题。

    12.控制器的View默认是占满整个屏幕的。

    13.通过拖线设置navigationController的rootViewController属性可以设置根控制器。

    14.storyboard直接拖NavigationCotroller,然后通过拖线连接的方式连接ViewController,segue选择push。(在IOS7的时候还是能选择push,但是在ios8的时候,xcode6.1.1版本上push已经变成了不建议使用,有新的名为show的方法可以替代,起到同样效果,暂时不知道有什么优点)

    15.观察控制器生命周期的方法:

    1. viewDidLoad:窗口加载完毕。
    2. ViewWillAppear:窗口即将显示到window上。
    3. viewDidAppear:窗口已经显示到window上。
    4. viewWillDisappear:窗口即将从window上移除。
    5. viewDidDisappear:窗口已经从window上移除。
    6. viewWillUnload:内存即将销毁的时候。
    7. viewDidUnload:内存销毁完毕的时候。
    8. didReciveMemoryWarning:接收到内存警告的时候。
      // MyController1 viewDidLoad
      // MyController1 viewWillAppear
      // MyController1 viewDidAppear
      // MyController2 viewDidLoad
      // MyController1 viewWillDisAppear
      // MyController2 viewWillAppear
      // MyController1 viewDidDisAppear
      // Mycontroller2 viewDidAppear
      生命周期部分打印结果

    16.生命周期参考图:

    17.内存警告处理参考图:


    刚开始写没几天,只是对我每天所学知识的一个记录,写的很乱,如果有错还望指正。

    /!-- 灰色表示以后研究。--/

  • 相关阅读:
    html悬停文字
    在线表单验证
    无法定位ul列表的下拉选项
    HDU 4576 Robot(概率dp+滚动数组)
    HDU 4405 Aeroplane chess(期望dp)
    CodeForces 401C Team(简单构造)
    POJ 2253 Frogger(最短路Dijkstra or flod)
    HDU 4763 Theme Section(kmp)
    【JZOJ5462】好文章【哈希】
    【JZOJ5462】好文章【哈希】
  • 原文地址:https://www.cnblogs.com/zthek/p/4775123.html
Copyright © 2011-2022 走看看