最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解iOS的UI開發(fā)中控制器的創(chuàng)建方法

 更新時(shí)間:2015年11月26日 12:22:59   作者:文頂頂  
這篇文章主要介紹了iOS的UI開發(fā)中控制器的創(chuàng)建方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下

控制器的創(chuàng)建
說明:控制器有三種創(chuàng)建方式,下面一一進(jìn)行說明。

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

1.創(chuàng)建一個(gè)空的IOS項(xiàng)目。

2.為項(xiàng)目添加一個(gè)控制器類。

20151126121621654.png (536×159)

3.直接在代理方法中創(chuàng)建一個(gè)控制器。

復(fù)制代碼 代碼如下:

#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];
   
    //創(chuàng)建控制器
    YYViewController *controller=[[YYViewController alloc]init];
    //設(shè)置控制器View的背景顏色
    controller.view.backgroundColor=[UIColor brownColor];
    //設(shè)置該控制器為Window的根控制器
    self.window.rootViewController=controller;
    [self.window makeKeyAndVisible];
    return YES;
}


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

20151126122000297.png (319×502)

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

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

2.設(shè)置這個(gè)控制器和程序中的YYviewController類進(jìn)行關(guān)聯(lián),設(shè)置控制器view的顏色以便區(qū)分。

20151126122020068.png (800×323)

3.注意這種錯(cuò)誤寫法。

復(fù)制代碼 代碼如下:

- (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;
}


注意:僅僅這樣是不行的,因?yàn)槌绦蛑胁]有加載storyboard,所以沒有能夠創(chuàng)建出我們想要的控制器。怎么辦?明確的告訴要加載的storyboard。

4.創(chuàng)建代碼:

復(fù)制代碼 代碼如下:

#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,并不會(huì)創(chuàng)建storyboard中的控制器和控件)
    UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"test" bundle:nil];
   
    //2.下面這個(gè)方法代表著創(chuàng)建storyboard中箭頭指向的控制器(初始控制器)
    YYViewController *controller=[storyboard instantiateInitialViewController];
   
    //參考
 //   UINib *nib=[UINib nibWithNibName:@"test" bundle:nil];
  //  [nib instantiateWithOwner:nil options:nil];
   
    //3.設(shè)置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


步驟:

(1)加載storyboard

(2)創(chuàng)建控制器

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

5.拓展

新的需求:如果在一個(gè)storyboard中又多個(gè)控制器,如何指定創(chuàng)建哪個(gè)特定的控制器呢?

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

(1)更改初始控制器,即把箭頭拖拽到想要?jiǎng)?chuàng)建的控制器前面,在代碼中進(jìn)行創(chuàng)建。

20151126122046257.png (782×296)

實(shí)現(xiàn)代碼:

復(fù)制代碼 代碼如下:

#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.創(chuàng)建指定的控制器
    UIViewController *controller=[storyboard instantiateInitialViewController];
   
    //3.設(shè)置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


提示:注意創(chuàng)建的指定控制器的類型。

(2)通過設(shè)置唯一的標(biāo)識符來創(chuàng)建指定的控制器

20151126122106223.png (840×287)

實(shí)現(xiàn)代碼:

復(fù)制代碼 代碼如下:

#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.創(chuàng)建指定的控制器
   
    UIViewController *controller=[storyboard instantiateViewControllerWithIdentifier:@"one"];
    //3.設(shè)置控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


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

1.新建一個(gè)xib文件,命名為two.xib。

2.創(chuàng)建過程和注意點(diǎn)

(1)創(chuàng)建代碼:

復(fù)制代碼 代碼如下:

#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創(chuàng)建控制器
    YYViewController *controller=[[YYViewController alloc]initWithNibName:@"two" bundle:nil];
    //2.設(shè)置這個(gè)控制器為Window的根控制器
    self.window.rootViewController=controller;
   
    [self.window makeKeyAndVisible];
    return YES;
}


(2)兩個(gè)錯(cuò)誤注意點(diǎn)

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

產(chǎn)生原因:在xib文件中沒有進(jìn)行任何操作。

解決方法:往xib中拖一個(gè)view

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

產(chǎn)生原因:沒有把xib的view設(shè)置為YYviewController的view

解決方法:設(shè)置File‘s Owner,可以理解為設(shè)置這個(gè)文件歸誰所有,對File‘s Owner和view進(jìn)行連線。連線是因?yàn)橐粋€(gè)xib中可能會(huì)有多個(gè)view,在storyboard中默認(rèn)就已經(jīng)進(jìn)行了連線。

20151126122219443.png (895×168)

四、模仿有storyboard的項(xiàng)目控制器的創(chuàng)建

1.創(chuàng)建一個(gè)項(xiàng)目

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

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

復(fù)制代碼 代碼如下:

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


控制器的View的創(chuàng)建
一、6種創(chuàng)建控制器View的方式

復(fù)制代碼 代碼如下:

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

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


六種方式:

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

二、創(chuàng)建控制器View的優(yōu)先級

20151126122242127.png (719×380)

蘋果官方文檔示意圖:

20151126122258265.png (1421×1210)

三、控制器View的延遲加載

說明:

控制器的view是延遲加載的:用到時(shí)再加載

可以用isViewLoaded方法判斷一個(gè)UIViewController的view是否已經(jīng)被加載

控制器的view加載完畢就會(huì)調(diào)用viewDidLoad方法

復(fù)制代碼 代碼如下:

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


主控制器文件中:

復(fù)制代碼 代碼如下:

#import "NJViewController.h"

@interface NJViewController ()

@end

@implementation NJViewController

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

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


相關(guān)文章

  • iOS中sqlite的詳細(xì)用法

    iOS中sqlite的詳細(xì)用法

    在iOS中,也同樣支持sqlite。目前有很多第三方庫,封裝了sqlite操作,比如swift語言寫的SQLite.swift,對sqlite感興趣的小伙伴們可以參考一下
    2016-05-05
  • 在iOS中實(shí)現(xiàn)谷歌滅霸彩蛋的完整示例

    在iOS中實(shí)現(xiàn)谷歌滅霸彩蛋的完整示例

    這篇文章主要給大家介紹了關(guān)于如何在iOS中實(shí)現(xiàn)谷歌滅霸彩蛋的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button

    IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button

    這篇文章主要為大家詳細(xì)介紹了IOS UI學(xué)習(xí)教程之使用代碼創(chuàng)建button,感興趣的小伙伴們可以參考一下
    2016-03-03
  • IOS開發(fā)筆記整理49之詳解定位CLLocation

    IOS開發(fā)筆記整理49之詳解定位CLLocation

    在項(xiàng)目功能中有一個(gè)定位CLLocation的需求,遇到了一些知識難點(diǎn),經(jīng)過各位大俠的幫助,問題解決,特此分享供大家學(xué)習(xí),希望大家共同學(xué)習(xí)進(jìn)步
    2015-11-11
  • Flutter?ScrollController滾動(dòng)監(jiān)聽及控制示例詳解

    Flutter?ScrollController滾動(dòng)監(jiān)聽及控制示例詳解

    這篇文章主要為大家介紹了Flutter?ScrollController滾動(dòng)監(jiān)聽及控制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • iOS 10新的通知機(jī)制中添加圖片的方法詳解

    iOS 10新的通知機(jī)制中添加圖片的方法詳解

    這篇文章主要介紹了iOS 10新的通知機(jī)制中添加圖片的方法,文中介紹的非常詳細(xì),相信對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03
  • iOS如何巧妙解決NSTimer的循環(huán)引用詳解

    iOS如何巧妙解決NSTimer的循環(huán)引用詳解

    這篇文章主要給大家介紹了關(guān)于iOS如何巧妙解決NSTimer的循環(huán)引用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • iOS模仿電子書首頁實(shí)現(xiàn)書架布局樣式

    iOS模仿電子書首頁實(shí)現(xiàn)書架布局樣式

    這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)類似電子書首頁效果樣式,實(shí)現(xiàn)書架布局樣式,感興趣的小伙伴們可以參考一下
    2016-03-03
  • iOS自定義UITabBar中間按鈕

    iOS自定義UITabBar中間按鈕

    這篇文章主要為大家詳細(xì)介紹了iOS自定義UITabBar中間按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • iOS開發(fā)中以application/json上傳文件實(shí)例詳解

    iOS開發(fā)中以application/json上傳文件實(shí)例詳解

    在和sever后臺(tái)交互的過程中、有時(shí)候、他們需要我們iOS開發(fā)者以“application/json”形式上傳,具體實(shí)例代碼大家參考下本文
    2017-07-07

最新評論

凤冈县| 成安县| 孝昌县| 博客| 香河县| 武夷山市| 延庆县| 沽源县| 新营市| 都兰县| 扎囊县| 抚远县| 临城县| 绥宁县| 博客| 金寨县| 三台县| 西青区| 新兴县| 丽水市| 肇庆市| 勃利县| 邢台市| 双峰县| 乐昌市| 两当县| 利川市| 蒙自县| 河曲县| 京山县| 蚌埠市| 忻城县| 临武县| 凤山县| 赫章县| 纳雍县| 淳化县| 西畴县| 临江市| 安义县| 札达县|