亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

詳解iOS的UI開發中控制器的創建方法

2020-07-26 03:31:36
字體:
來源:轉載
供稿:網友

控制器的創建
說明:控制器有三種創建方式,下面一一進行說明。

一、第一種創建方式(使用代碼直接創建)

1.創建一個空的IOS項目。

2.為項目添加一個控制器類。

20151126121621654.png (536×159)

3.直接在代理方法中創建一個控制器。

復制代碼 代碼如下:

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
   
    //創建控制器
    YYViewController *controller=[[YYViewController alloc]init];
    //設置控制器View的背景顏色
    controller.view.backgroundColor=[UIColor brownColor];
    //設置該控制器為Window的根控制器
    self.window.rootViewController=controller;
    [self.window makeKeyAndVisible];
    return YES;
}


4.控制器的view添加到Window上顯示出來。

20151126122000297.png (319×502)

二、第二種創建方式(通過storyboard創建)

1.添加一個storyboard文件,命名為test,在界面上拖一個view controller控制器。

2.設置這個控制器和程序中的YYviewController類進行關聯,設置控制器view的顏色以便區分。

20151126122020068.png (800×323)

3.注意這種錯誤寫法。

復制代碼 代碼如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
   
    YYViewController *controller=[[YYViewController alloc]init];
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


注意:僅僅這樣是不行的,因為程序中并沒有加載storyboard,所以沒有能夠創建出我們想要的控制器。怎么辦?明確的告訴要加載的storyboard。

4.創建代碼:

復制代碼 代碼如下:

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
//    YYViewController *controller=[[YYViewController alloc]init];
   
    //1.加載storyboard,(注意:這里僅僅是加載名稱為test的storyboard,并不會創建storyboard中的控制器和控件)
    UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
   
    //2.下面這個方法代表著創建storyboard中箭頭指向的控制器(初始控制器)
    YYViewController *controller=[storyboard instantiateInitialViewController];
   
    //參考
 //   UINib *nib=[UINib nibWithNibName:@"test" bundle:nil];
  //  [nib instantiateWithOwner:nil options:nil];
   
    //3.設置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


步驟:

(1)加載storyboard

(2)創建控制器

(3)把控制器設置為Window的根控制器

5.拓展

新的需求:如果在一個storyboard中又多個控制器,如何指定創建哪個特定的控制器呢?

這里有兩種方法可以考慮:

(1)更改初始控制器,即把箭頭拖拽到想要創建的控制器前面,在代碼中進行創建。

20151126122046257.png (782×296)

實現代碼:

復制代碼 代碼如下:

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
//    YYViewController *controller=[[YYViewController alloc]init];
   
    //1.加載storyboard
    UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
   
    //2.創建指定的控制器
    UIViewController *controller=[storyboard instantiateInitialViewController];
   
    //3.設置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


提示:注意創建的指定控制器的類型。

(2)通過設置唯一的標識符來創建指定的控制器

20151126122106223.png (840×287)

實現代碼:

復制代碼 代碼如下:

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
    //1.加載storyboard
    UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
   
    //2.創建指定的控制器
   
    UIViewController *controller=[storyboard instantiateViewControllerWithIdentifier:@"one"];
    //3.設置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


三、第三種創建方式(使用xib)

1.新建一個xib文件,命名為two.xib。

2.創建過程和注意點

(1)創建代碼:

復制代碼 代碼如下:

#import "YYAppDelegate.h"
#import "YYViewController.h"

@implementation YYAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
    //1.通過xib創建控制器
    YYViewController *controller=[[YYViewController alloc]initWithNibName:@"two" bundle:nil];
    //2.設置這個控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


(2)兩個錯誤注意點

1)不能加載(was unable to load a nib named "two")

產生原因:在xib文件中沒有進行任何操作。

解決方法:往xib中拖一個view

2)加載了xib,但是沒有設置輸出口(loaded the "two" nib but the view outlet was not set.')

產生原因:沒有把xib的view設置為YYviewController的view

解決方法:設置File‘s Owner,可以理解為設置這個文件歸誰所有,對File‘s Owner和view進行連線。連線是因為一個xib中可能會有多個view,在storyboard中默認就已經進行了連線。

20151126122219443.png (895×168)

四、模仿有storyboard的項目控制器的創建

1.創建一個項目

2.在配置文件中,把主storyboard的名稱刪掉(找不到storyboard)。

3.代碼(storyboard做的事情就是下面的代碼所做的事情)

復制代碼 代碼如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  
    // Override point for customization after application launch.
    // 1.創建winodw
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    // 2.創建控制器
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    NJViewController * vc = [storyboard instantiateInitialViewController];
    // 3.設置window的根控制器
    self.window.rootViewController = vc;
    // 4.顯示window
    [self.window makeKeyAndVisible];
   
    return YES;
}


控制器的View的創建
一、6種創建控制器View的方式

復制代碼 代碼如下:

#import "NJAppDelegate.h"
#import "NJViewController.h"
/*
 1.沒有同名xib情況下
 2.通過 storyboard 創建
 3.有指定xib情況下創建
 4.有同名xib情況
 5.有同名去掉controll的情況
 6.loadveiw
 */
@implementation NJAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 創建UIWindow
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
    /*
     // 1.第一種方式:沒有xib和storyboard
     // (如果沒有xib和storyboard, 會自動創建一個空白的view做為控制器的veiw)
     NJViewController *vc = [[NJViewController alloc] init];
     */
   
    /*
     //2.通過 storyboard 創建
     // 如果通過storyboard創建, 會創建箭頭指向view做為控制器的veiw
    
     // 如果重寫了控制器的loadview方法, 就不會創建storyboard中描述的view作為控制器的view, 而是創建一個空白的veiw做為控制器的veiw
     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Test" bundle:nil];
     NJViewController *vc = [storyboard instantiateInitialViewController];
     */
   
    /*
     // 3.有指定xib情況下創建
     // 如果通過xib, 會創建xib中描述的veiw做為控制器的veiw
     NJViewController *vc = [[NJViewController alloc] initWithNibName:@"One" bundle:nil];
     */
   
    /*
     //  4.有同名xib情況
     // 如果有同名的xib, 會自動找到同名xib中描述的view做為控制器的veiw
     NJViewController *vc = [[NJViewController alloc] init];
     */
   
    /*
     // 5.有同名去掉Controller的 xib情況
     // 如果有有同名去掉Controller的xib, 會自動找到該xib的view做為控制器的view
     NJViewController *vc = [[NJViewController alloc] init];
     */
   
    // 6.重寫控制器的loadveiw方法
    // 如果重寫了控制器的loadview方法, 就不會去加載創建同名去掉controller的xib和同名的xib, 而是創建一個空白的veiw做為控制器的veiw
    NJViewController *vc = [[NJViewController alloc] init];
   
    // 設置控制器為window的根控制器
    self.window.rootViewController = vc;
    // 顯示window
    [self.window makeKeyAndVisible];
   
    return YES;
}


六種方式:

1.沒有同名xib情況下
2.通過 storyboard 創建
3.有指定xib情況下創建
4.有同名xib情況
5.有同名去掉controll的情況
6.loadveiw

二、創建控制器View的優先級

20151126122242127.png (719×380)

蘋果官方文檔示意圖:

20151126122258265.png (1421×1210)

三、控制器View的延遲加載

說明:

控制器的view是延遲加載的:用到時再加載

可以用isViewLoaded方法判斷一個UIViewController的view是否已經被加載

控制器的view加載完畢就會調用viewDidLoad方法

復制代碼 代碼如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 1.創建UIWindow
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];
   
   
    // 2.創建控制器
     NJViewController *vc = [[NJViewController alloc] init];
   
    // 其實是兩步操作, 首先調用loadview方法, 創建控制器的veiw,然后再設置控制器的view的顏色為紫色, 也就是說后一次的顏色覆蓋掉了前一次的顏色
    vc.view.backgroundColor = [UIColor purpleColor];
   
    // 3.設置控制器為window的根控制器
    self.window.rootViewController = vc;
   
    // 4.顯示window(在這一行才用到了控制器的veiw)
    [self.window makeKeyAndVisible];
   
    return YES;
}


主控制器文件中:

復制代碼 代碼如下:

#import "NJViewController.h"

@interface NJViewController ()

@end

@implementation NJViewController

// 當控制器需要顯示控制器的view的時候就會調用loadView
// 可以在loadView方法中創建view給控制器
// 該方法一般用于自定義控制器的view
- (void)loadView
{
    // 什么時候調用loadveiw就代表什么時候加載控制器的veiw
    NSLog(@"loadView");
   
    self.view = [[UIView alloc] init];
    self.view.backgroundColor = [UIColor greenColor];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"viewDidLoad");
}
@end


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品综合久久久| 亚洲人成五月天| 中文字幕日韩av电影| 亚洲精品国产成人| 亚洲国产成人精品久久久国产成人一区| 国产一区二区三区久久精品| 在线免费观看羞羞视频一区二区| 亚洲欧美日韩久久久久久| 亚洲一区美女视频在线观看免费| 国产精品久久久久久久久久99| 国产91成人在在线播放| 日韩毛片在线看| 国产91精品最新在线播放| 欧美精品videossex性护士| 国产精品久久久91| 91精品国产高清久久久久久91| 亚洲国产成人在线播放| 日韩美女在线观看| 91精品免费看| 精品视频在线播放色网色视频| 日韩精品在线观看网站| 91国偷自产一区二区三区的观看方式| 九九综合九九综合| 国产婷婷色综合av蜜臀av| 亚洲欧美一区二区激情| 亚洲综合成人婷婷小说| 91精品视频播放| 国产精品va在线播放我和闺蜜| 日韩成人中文字幕在线观看| 超碰精品一区二区三区乱码| 91色p视频在线| 国产成人精品久久亚洲高清不卡| 国产精品一区二区久久| 精品亚洲精品福利线在观看| 精品国产成人av| 欧美大尺度激情区在线播放| 欧美裸体xxxx| 欧美电影免费观看高清完整| 国产a∨精品一区二区三区不卡| 91日本在线观看| 欧美性极品xxxx做受| 97精品国产97久久久久久| 亚洲影院色无极综合| 日韩欧美中文免费| 亚洲欧美精品中文字幕在线| 日韩欧美亚洲国产一区| 久久精品国产一区二区电影| 91久久夜色精品国产网站| 国产视频一区在线| 日韩av免费在线播放| 大桥未久av一区二区三区| 亚洲国产精品热久久| 欧美激情在线观看| 国产精品视频久| 精品中文字幕在线观看| 久久久精品在线观看| 国产精品成人久久久久| 成人黄色午夜影院| 成人在线激情视频| 欧美日韩国产精品一区二区不卡中文| 成人信息集中地欧美| 欧美中文字幕视频| 欧美高清第一页| 亚洲一区二区三区四区在线播放| 久久久999国产| 日韩激情av在线播放| 91国偷自产一区二区三区的观看方式| 一区二区三区在线播放欧美| 日韩中文字幕视频| 亚洲最大的免费| 日韩女优人人人人射在线视频| 午夜精品理论片| 91成人福利在线| 欧美激情久久久| 亚洲一区二区三区在线视频| 最近2019中文免费高清视频观看www99| 欧美极品第一页| 久久99精品久久久久久噜噜| 午夜精品免费视频| 在线播放国产精品| 亚洲国内精品在线| 国内精品国产三级国产在线专| 亚洲开心激情网| 97热在线精品视频在线观看| 亚洲精品不卡在线| 91系列在线观看| 久久夜色精品国产| 日韩在线视频中文字幕| 久久最新资源网| 国外成人在线直播| 欧美高清自拍一区| 久久久爽爽爽美女图片| 欧美福利在线观看| 最近2019年日本中文免费字幕| 视频在线观看99| 欧美一性一乱一交一视频| 91精品啪在线观看麻豆免费| 亚洲精品乱码久久久久久金桔影视| 久久成人综合视频| 欧美自拍视频在线观看| 国产亚洲日本欧美韩国| 亚洲人成网站色ww在线| 中文字幕免费精品一区高清| 亚洲美女免费精品视频在线观看| 国产亚洲免费的视频看| 国产欧美精品日韩| 欧美日韩免费区域视频在线观看| 日韩a**站在线观看| 91久久国产综合久久91精品网站| 九九九久久久久久| 久久久久国产一区二区三区| 69av成年福利视频| 亚洲欧美国产一区二区三区| 久久精品视频在线播放| 成人性生交大片免费观看嘿嘿视频| 亚洲级视频在线观看免费1级| 欧美精品18videosex性欧美| 色噜噜狠狠狠综合曰曰曰88av| 青草青草久热精品视频在线观看| xxxx欧美18另类的高清| 成人免费观看网址| 成人黄色生活片| 久久久久久久久国产| 亚洲mm色国产网站| 欧美精品日韩三级| 亚洲精品91美女久久久久久久| 日韩欧美极品在线观看| 国产福利视频一区二区| 亚洲人成亚洲人成在线观看| 中文字幕免费国产精品| 午夜精品一区二区三区视频免费看| 亚洲男人av在线| 国产成人精品久久| 日韩欧美有码在线| 国产亚洲精品一区二555| 欧美一级淫片播放口| 久久艹在线视频| 午夜精品一区二区三区视频免费看| 日韩av在线最新| 欧美成人高清视频| 91精品久久久久久久久久久| 亚洲精品aⅴ中文字幕乱码| 欧美在线视频一区二区| 欧美一级视频在线观看| 成人午夜在线影院| 国产精品入口日韩视频大尺度| 美女视频久久黄| 日韩美女主播视频| 国产精品国产三级国产专播精品人| 日韩av中文字幕在线免费观看| 日韩美女在线播放| 久久99视频精品| 久久久久这里只有精品| 亚洲肉体裸体xxxx137| 国产精品海角社区在线观看| 欧美黄色小视频| 成人欧美一区二区三区在线| 欧美日韩一二三四五区| 亚洲第一区第二区| 国产欧美一区二区三区在线看| 国产精品美腿一区在线看| 日韩欧美精品网站| 亚洲国语精品自产拍在线观看| 欧美黑人狂野猛交老妇|