[TwistedFate]MVC視圖控制器

MVC

基本介紹

  • UIViewController是MVC設計模式的核⼼。
  • MVC是⼀個框架級的設計模式。
  • M是Model,主要⽤於建⽴數據模型(即數據的結構)
  • V是View,我們能看到的所有控件都是view,view主要的功能是展⽰數據。
  • C是控制器,主要是控制M和V的通信
    一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯

優點

讓視圖(View)可以複用

應用

首先 視圖層
1. 視圖層(view) 只寫視圖的佈局
2. 數據模型層(model) 只寫數據的結構(以NS開頭)
3. 控制器(controller)負責邏輯部分(例如從model裏取數據 然後去更改視圖顯示)
MVC 把工程中的代碼模塊化(降低耦合度) 儘量然視圖部分的代碼可以複用
一般一個視圖控制一個頁面

視圖控制器

每一個視圖控制器 都自帶一個view
這個view和屏幕一樣大

loadView方法

每一個視圖控制器 都自帶一個View
並且這個View跟屏幕一樣大

- (void)loadView{
// 這個方法是加載視圖的 並且加載的是自身的View
// 調用父類的方法 去加載自身的View
// [super  loadView];

// 用之前的LoginView替換 控制器自帶的View
    LoginView *logview = [[LoginView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    logview.tag = 1000;
    // 幫系統給self.view賦值
    self.view = logview;
    [logview release];
}

viewDidLoad

視圖已經加載完成

 1. (void)viewDidLoad{
    [super viewDidLoad];
    //  控制器中寫邏輯部分
    // 更改一下自身的顏色
    self.view.backgroundColor = [UIColor grayColor];
    LoginView *loginView = (LoginView *)self.view ;
    [loginView.loginButton addTarget:self action:@selector(button:) forControlEvents:(UIControlEventTouchUpInside)];
}

didReceiveMemoryWarning

 2. (void)didReceiveMemoryWarning{
    [super didReceiveMemoryWarning];
    NSL(@"內存警告");
    // 內存警告 做什麼
    // 釋放已經顯示過的視圖 並且不是當前顯示的
    // 如果這個視圖正在被顯示 那麼這個視圖的window屬性就不爲空
    if([self isViewLoad] == YES && self.view.window == nil){
    // 把當前視圖釋放
    self.view = nil;
    }
}

檢測屏幕旋轉

屏幕旋轉
- 屏幕橫屏時 改變原來的佈局
- 屏幕豎屏時 屏幕豎屏時 變回原來的佈局
1. 允許屏幕旋轉

- (BOOL)shouldAutorotate{
    return YES;
}
  1. 指定屏幕旋轉的方向
- (NSUInteger)supportedInterfaceOrientations{
    // 制定屏幕旋轉方向
    return UIInterfaceOrientationMaskAll;
}
  1. 找到旋轉觸發的方法
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator{
    // 打印屏幕大小
    NSLog(@"%@",NSStringFromCGSize(size));
}
  1. 判斷屏幕方向 更改佈局
// 重新佈局子視圖
// frame發生變化的時候會觸發layoutSubViews方法
- (void)layoutSubviews{

    // 因爲不知道父類這個方法做了什麼
    // 所以需要在重寫的時候先調用父類的方法 然後再寫自己需要寫的方法
    [super layoutSubviews];
    // 更改佈局 frame發生變化 相當於橫屏了
    // 此時 需要重新佈局
    // 判斷豎屏 還是 橫屏
    // 1.把應用程序取出來
    // 2.判斷一下當前應用程序 屏幕的朝向

    // 取出應用程序
    // 單例方法命名規範share----
    UIApplication *app = [UIApplication sharedApplication];
    // 判斷方向
    if (app.statusBarOrientation == UIInterfaceOrientationPortrait || app.statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown) {
        NSLog(@"豎着");


            self.passWordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x, self.userNameLTView.frame.origin.y + self.userNameLTView.frame.size.height + kRowHeight, self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);
    }else {
        NSLog(@"橫着");
            self.passWordLTView.frame = CGRectMake(self.userNameLTView.frame.origin.x + self.userNameLTView.frame.size.width + 10, self.userNameLTView.frame.origin.y , self.userNameLTView.frame.size.width, self.userNameLTView.frame.size.height);
    }
}
  1. 測試一下
發佈了68 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章