天天看點

05_視圖控制器_1

視圖控制器的概念和作用:

視圖控制器像一個大管家一樣,負責視圖的添加,解除安裝,橫豎屏等

每一個界面都由一個視圖控制器來管理

UIViewController是所有視圖控制器的父類

每一個視圖控制器都自帶一個UIView

//在沒有建立XIB檔案的時候,第3行代碼并不會被執行。

//因為執行建立myViewController1的view的前提條件是:1.目前視圖控制器的根視圖是nil 2.調用了根視圖的選擇器getter方法

1     myViewController1 *mycontr1 = [[myViewController1 alloc]init];
2     
3     mycontr1.view.backgroundColor = [UIColor yellowColor];
4     
5     self.window.rootViewController = mycontr1;
6     
7     mycontr1.view.backgroundColor = [UIColor greenColor];      

模态

模态視圖的使用場景:

1.收集使用者輸入資訊

2.臨時呈現一些内容,例如廣告等

3.臨時改變工作模式

4.呈現一個新的view層級

注意:這幾種情況都會暫時中斷程式正常的執行流程

具體實作:

在第一個.m檔案中建立button方法:

1 - (IBAction)buttonInAction:(UIButton *)sender {
2     myViewController2 *myContr2 = [[myViewController2 alloc]init];
3     
4     [self presentViewController:myContr2 animated:YES completion:nil];
5 }      

在第二個.m檔案中建立button方法:

1 - (IBAction)backAction:(UIButton *)sender {
2     [self dismissViewControllerAnimated:YES completion:nil];
3 }      

即實作了簡單的一個頁面跳轉的模态

課堂練習 利用代理建立一個模态視圖:

首先應該設定一個協定

@protocol presentDelegate <NSObject>

- (void)transmit:(NSString *)transmit;

@end      

然後應該在@interface中聲明一個代理對象

@property (nonatomic,weak)id<presentDelegate> delegate;      

接着在第二個.m檔案調用協定方法,将數值傳入到第一個視圖中

- (void)buttonAction{
    
    [self.delegate transmit:_text.text];
    
    [self dismissViewControllerAnimated:YES completion:nil];
}      

在第一個視圖中簽訂一下協定

1 @interface ViewController1 : UIViewController <presentDelegate>      

在第一個視圖中調用button方法的時候設定代理

1 - (void)buttonAction{
2     
3     ViewController2 *mycontr2 = [[ViewController2 alloc]init];
4     mycontr2.delegate = self;
5     
6     [self presentViewController:mycontr2 animated:YES completion:nil];
7     
8 }      

最後實作一下協定方法,将内容接收到,便可以顯示到第一個視圖中的label中了

1 - (void)transmit:(NSString *)transmit{
2     _label1.text = transmit;
3     
4 }      

 @end

轉載于:https://www.cnblogs.com/studyController/p/5634150.html