你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發-UI (四)UIViewController

iOS開發-UI (四)UIViewController

編輯:IOS開發綜合

這篇知識很重要,最好全掌握:

知識點:

1.UIViewController根本看法

2.UIViewController之間的切換

3.UIViewController生命周期

4.多個Controller之間的數據如何交流

 

=========================

UIViewController

 

   1.MVC設計形式

MVC設計形式:Model模型 View視圖 Controller控制器

 

   2.Window需求一個根視圖控制器

RootViewController *rootCtl = [[RootViewController alloc] init];

    

    //設置根視圖控制器

    //假如在不改換根視圖控制器的狀況下,根視圖控制器是不會被釋放掉的

    self.Window.rootViewController = rootCtl;

 

   3.UIViewController對象默許都會有一個自帶的view

//實例化一個視圖控制器

    UIViewController *ctl = [[UIViewController alloc] init];

    //每一個控制器上,都自帶了一個UIView

    ctl.view.alpha = 0.5;

    

    //設置控制器自帶View的背風光(默許無背風光)

    ctl.view.backgroundColor = [UIColor whiteColor];

    self.Window.backgroundColor = [UIColor orangeColor];

 

   4.UIViewController和UIView的關系  

     1)UIViewController是視圖控制器,而UIView是視圖,也就是說UIViewController控制UIView 

    2)UIView需求顯示的內容(數據)也是要經過UIViewController來管理

     例子:UIViewController就是一個相框,而UIView就是一個相片

       相框可以隨時隨地的拿走這個相片而換另外一張相片,或許在這張相片上加一個新的相片

       而相片卻不能操縱相框 

 

=========================

UIViewController的根本用法

 

   1.實例化UIViewController 時調用init辦法後,會自動跳轉到如下辦法

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

//控制器的初始化辦法

//init - > initWithNibName:nibNameOrNil bundle:

-(instancetype)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{


    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {

        //留意: 不允許執行跟UI有關系的操作,雖然執行有些沒報錯,但這樣既不嚴厲也容易呈現一些烏七八糟的問題

        //self.view.backgroundColor XXX

        //允許執行跟數據有關系的操作

        //例如:數組的實例化,字典的實例化等等  

    }
    return self;

}

 

 

   2.viewDidLoad的作用

     普通我們會在這裡做界面上的做一些額定操作,比方往view中添加一些子視圖、

     從數據庫或許網絡加載模型數據裝配到子視圖中

 

   3.重寫viewDidLoad辦法

 

=========================

UIViewController之間的切換

 

   1.聯系功用到不同的Controller頁面上

 

   2.如何管理多個UIViewController之間的切換

     1)切換到新的視圖控制器

      - (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion

//切換到新的控制器

    /*

     參數1:要切換至的控制器對象

     參數2:能否需求動畫

     參數3:回調block,普通為nil

     */

    

    //懶加載機制:這個對象需求運用的時分,才會去實例化

    

[self presentViewController:newCtl animated:YES completion:nil];

 

 

     2)封閉以後視圖控制器

      - (void)dismissViewControllerAnimated:(BOOL)flag 

        completion:(void (^)(void))completion

[self dismissViewControllerAnimated:YES completion:nil];

 

 

     3)形式切換方式:

modalTransitionStyle

 

UIModalTransitionStyleCoverVertical    從下向上

UIModalTransitionStyleCrossDissolve      突變

UIModalTransitionStyleFlipHorizontal     橫向翻轉

UIModalTransitionStylePartialCurl           翻書

//設置切換的動畫效果

    

newCtl.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;

 

 

=========================

UIViewController的生命周期

 順序:

   1.alloc創立對象,分配空間

   2.init初始化對象,初始化數據

   3.LoadView -- self.view的創立 

   4.viewDidLoad作用

   5.viewDidLoad何時被調用

   6.viewWillAppear函數

   7.viewDidAppear函數

   8.viewWillDisappear函數

   9.viewDidDisappear函數

   10.dealloc視圖被銷毀

   //視圖行將消逝

例子:

-(void)viewWillDisappear:(BOOL)animated{

    [super viewWillDisappear:animated];

    NSLog(@"viewWillDisappear");

}

 

 

=========================

多個Controller之間的數據如何交流

   

     1.正向傳值

VA —> VB

傳值一方:

例如RootViewController.m裡傳值

NewViewController *newCtl = [NewViewController new];

    

    UILabel *label = (UILabel *)[self.view viewWithtag:100];

  1: newCtl.deliverStr = label.text;

獲取值一方:

   2:  NewViewController.h :  @property (nonatomic,copy)NSString *deliverStr;//承受傳遞過去的參數

   3:  NewViewController.m: label.text = self.deliverStr;

 

     2.反向傳值

VA <— VB

傳值一方

1:typedef void (^blockType)(NSString *);

 

@interface NewViewController : UIViewController

//回調的block

2:@property (nonatomic,copy)blockType block;

 

 

傳值一方

NewViewController *newCtl = [NewViewController new];

    

    UILabel *label = (UILabel *)[self.view viewWithtag:100];

//設置block的主體完成

  3:  newCtl.block = ^(NSString *text){

        label.text = text;      

    };

 

3.經過AppDelegate對象傳值

1)獲取以後使用的sharedApplication對象:

       

+ (UIApplication *)sharedApplication 傳值一方

UILabel *label = (UILabel *)[self.view viewWithtag:100];

    

    //先給AppDelgate的直達變量停止賦值

    

    //1.獲取UIAplication對象

    //2.獲取AppDelgate對象

    //3.賦值

    UIApplication *app = [UIApplication sharedApplication];

    AppDelegate *del = app.delegate;

    del.middleStr = label.text;

 

 

       2)獲取以後使用的AppDelegate對象:

       @property(nonatomic,assign) id<UIApplicationDelegate> delegate;

 

AppDelegate.h 裡

//直達的屬性變量

@property (nonatomic,copy)NSString *middleStr;

 

 

3)強迫轉換為AppDelegate對象,然後經過該對象的setter和getter傳值

取值一方

例如在將呈現的函數裡調用

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

  

    UIApplication *app = [UIApplication sharedApplication];

    AppDelegate *del = app.delegate;

    //判別不為空

    if (del.middleStr.length!=0) {

        UILabel *label = (UILabel *)[self.view viewWithTag:100];

        label.text = del.middleStr;

    }

}

 

 

協議代理傳值辦法

先創立一個協議.h文件,即 protocol 文件:內容如

#import <Foundation/Foundation.h>

@protocol Myprotocol <NSObject>

//代理需求完成的義務

-(void)showInfo:(NSString *)info;

@end

 

傳值一方:恪守協議

.h 文件:

@property (nonatomic,weak)id<Myprotocol> delegate;//指向代理對象

 

.m文件:

//讓代理對象執行辦法

   

if ([_delegate respondsToSelector:@selector(showInfo:)]) {

        [_delegate showInfo:label.text];
    }  

 

 

    //協議代理

    //代理:能完成這個義務的對象

    //被代理:希望完成這個義務,但是自身不能完成的對象

    //設置代理:找到能同時獲取到代理和被代理對象的地位

 

獲取值一方:恪守協議

.h文件裡:

@interface RootViewController : UIViewController<Myprotocol>

 

.m文件裡:

-(void)showInfo:(NSString *)info{

    //刷新Label顯示的文字內容

    UILabel *label = (UILabel *)[self.view viewWithTag:100];

    label.text = info;  

}

 

【iOS開發-UI (四)UIViewController】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved