(GeekBand)iOS实战开发第二周

作者: ad951f2b2664 | 来源:发表于2016-08-21 17:33 被阅读159次

    ViewController

    开始之前首先先了解下iOS开发常见的几种架构模式 MVC、MVVM、MVP、React
    MVC是基础 也就是重中之重 深入了解了MVC以后 再上手其他的架构模式会非常快

    MVC (弱耦合)

    MVC起源于1979年 其中M表示Model V表示View C表示Controller
    V和M相互并不联系 也就是 他们彼此都不知道谁是谁 Controller会直接引用M和V 但是M和V并不会引用Controller

    UIViewController

    UIViewController负责管理View 传递数据 响应用户操作 内存管理 保存状态以及适应设备 基本架构就是 一个ViewController衍生出一个Root View 其中RootView又衍生出多个View 创建RootView Controller最重要的两个文件是UIMainStoryBoardFile或NSMainNibFile 而ViewController中的View 系统会尽可能的推迟加载 虽然ViewController是轻量级 但是其中的View会占用大量的资源所以会尽量推迟加载

    ViewController的生存周期(Did-Will)

    ViewDidDisAppear-ViewWillAppear-ViewDidAppear-ViewWillDisAppear
    其中ViewDidDisAppear可以理解为View在没有加载到屏幕时的状态 ViewWillAppear可以理解为View将要加载到屏幕上 这里可以做一些数据的初始化、UI的布局之类的操作但是不建议放太多耗时的操作
    ViewDidAppear可以理解为 当View已经加载到屏幕上 响应一些用户的操作
    ViewWillDisAppear可以理解为 当View将要从屏幕上消失 可以做一些保存用户数据之类的操作

    ViewController生存周期示意图.png

    多个ViewController

    多个ViewController有不同的展现方式 但是需要注意的是在iphone上 默认的就只有FullScreen这一种 如果需要的其他的展示方式 需要写一个Pressent的动画


    多个ViewController呈现方式.png

    StoryBoard

    StoryBoard为我们实际开发中提供了许多非常方便的功能替我们减少了大量的代码量同时也提供了一种非常直观的展现了App中UI的布局以及观察View的层级关系的方式

    多个StoryBoard

    在日常开发中 肯定会需要多个View 所有的View放在同一个StoryBoard显然是不现实的 我们可以通过StoryBoard Reference这个控件来达到我们的效果


    StoryBoard Reference

    Segue传值以及界面跳转

    在日常开发中 VC之间的跳转是非常常见的 举个例子就是常见的返回主界面 可能有人会直接说 我们可以直接拖一个按钮到View上 然后和上一个VC连起来就好了 其实这样只是在原有的View上又覆盖了一层View 并不是真正意义上的返回 同时会造成内存占用越来越大 影响性能 真正的做法是利用segue进行跳转 以及利用Segue返回

    Segue

    Segue的返回 首先在.m文件中定义

    -(IBAction)unwindToHome:(UIStoryboardSegue *)unwindSegue towardsViewController:(UIViewController *)subsequentVC{
    }```
    然后在StoryBoard中创建一个Button 按住Ctrl然后连到VC上的Exit 如下图 选择你需要的Seuge
    ![Segue.png](https://img.haomeiwen.com/i2454553/00405268a7f5a7a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    #利用Segue进行传值
    Segue可以进行正向的传值也可以逆向
    可以利用系统提供给我们的PrepareForSegue来进行正向的传值 同时unwind segue或者Delegate来进行逆向的传值
    ![Segue传值](https://img.haomeiwen.com/i2454553/5f7baabbe18ff670.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    #Navigation Controller
    Navigation Controller是非常常见的组件 同时也是必不可少的 Iphone自带的日历中就用到了Nav 非常方便的提供了界面的跳转功能 便利了用户的操作
    
    
    Navigation Controller 由Nav bar和Nav ViewController组成 其中Nav ViewController管理VC NavBar管理各种NavBarItems 
    可以在Navigation Controller上添加ToolBar和UINavigationBar让用户的操作更为简单明了
    ![ToolBar](https://img.haomeiwen.com/i2454553/5648b94b6a81509a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    ![UIBarItems](https://img.haomeiwen.com/i2454553/1c9a87aa810b77d0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    #Tabbar
    用户通过点击相应的UITabBarItem进入对应的View 在StoryBoard中的层级关系应该如下图
    ![Tabbar.png](https://img.haomeiwen.com/i2454553/c0869b22bd7c0429.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    可以通过自定义UITabBarItem来让界面更美观一些  其中Badge默认为空 可以填写任意数字 此时Bar Item左上角会出现一个红色的数字 展示效果详见 微博接受到新的私信 Selected Image默认为空 如果有放入image 则用户点击以后 会变成相应的image Title Position则为显示方式 默认是居中
    ![自定义.png](https://img.haomeiwen.com/i2454553/58e1f59a40a978e9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    #TableView Controller
    UITableView是iOS最常用的界面组件 例如iOS设备上的设置 一个基本的表格组件需要考虑 数据集的输入(data sourece)、 每行的显示(row data)、每行的操作(删除 修改 修改行的显示顺序)
    
    UITableView的结构如下图 可以看出一个UITableView可以由多个Section组成 Section中又由多个row组成 同时也有Section header和Section footer 并且每一个row都需要有相对应的点击事件  
    
    ![UITableView结构](https://img.haomeiwen.com/i2454553/7310117d0bcea717.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    
    UITableView中最重要的三个函数(个人认为)
    1.确定每个Section中row的个数
    
    • (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
      //根据section的下标做判断 并不是个数
      if (section == 3) {
      return 3;
      }else{
      return 5;
      }
      }
    2.确定view中的Section
    

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 5;
    }

    3.确定cell的重用标签 这里需要注意 如果cell是static的 则不需要重写这个方法
    
    • (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
      UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"my cell"];
      if (cell == nil) {
      cell =[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"my cell"];
      }
      return cell;
      }

    相关文章

      网友评论

        本文标题:(GeekBand)iOS实战开发第二周

        本文链接:https://www.haomeiwen.com/subject/cdfwsttx.html