貓貓學IOS(二十三)UI之控制器管理

來源:互聯網
上載者:User

標籤:ui   storyboard   ios   控制器   

貓貓分享,必須精品

原創文章,歡迎轉載。轉載請註明:翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents

控制器以及view的多種建立方式

控制器view的載入

通過storyboard建立

1:先載入storyboard?件(Test是storyboard的?檔案名稱)

UIStoryboard *storyboard = [UIStoryboardstoryboardWithName:@"Test" bundle:nil];

2:初始化storyboard中的控制器
初始化“初始控制器”(箭頭所指的控制器)

NYViewController *NY = [storyboard instantiateInitialViewController];

3: 通過?個標識初始化對應的控制器

NYViewController *NY = [storyboardinstantiateViewControllerWithIdentifier:@”NY"];
代碼直接建立
NYViewController *ny = [[NYViewController alloc] init];
指定xib?檔案來建立
NYViewController *ny = [[NYViewController alloc]initWithNibName:@”NYViewController" bundle:nil];
多控制器

?個iOS的app很少只由一個控制器組成,除非這個app極其簡單, 當app中有多個控制器的時候,我們就需要對這些控制器進?管理 ,控制器也是如此:
用1個控制器去管理其他多個控制器。

比如:?一個控制器A去管理3個控制器B、C、D  控制器A被稱為控制器B、C、D的“?父控制器” 控制器B、C、D的被稱為控制器A的“?子控制器”

為了便於管理控制器,iOS提供了2個?較特殊的控制器

**
? UINavigationController
? UITabBarController
**

控制器view的消極式載入:
控制器view的消極式載入:控制器的view是消極式載入的:用到時再載入。可以用isViewLoaded?法判斷一個UIViewController的view是否已經被載入。控制器的view載入完畢就會調用viewDidLoad方法。
UINavigationController

用UINavigationController,可以輕鬆地管理多個控制器,輕鬆完成控制器之間的切 換,典型例子就是系統內建的“設定”應?。

UINavigationController的使用步驟

1:初始化UINavigationController
2:設定UIWindow的rootViewController為UINavigationController
3:根據具體情況,通過push?方法添加對應個數的子控制器

UINavigationController的子控制器特點

1: UINavigationController以棧的形式儲存子控制器

@property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers;

2:使用push?法能將某個控制器壓入棧

- (void)pushViewController:(UIViewController *)viewControlleranimated:(BOOL)animated;

3:使?pop方法可以移除控制器
將棧頂的控制器移除

- (UIViewController *)popViewControllerAnimated:(BOOL)animated;

回到指定的?子控制器

- (NSArray *)popToViewController:(UIViewController*)viewController animated:(BOOL)animated;

回到根控制器(棧底控制器)

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated;
UINavigationBar內容的設定如何修改導覽列的內容

導覽列的內容由棧頂控制器的navigationItem屬性決定 UINavigationItem有以下屬性影響著導覽列的內容。

1:左上方的返回按鈕

@property(nonatomic,retain) UIBarButtonItem *backBarButtonItem;

2: 中間的標題視圖

@property(nonatomic,retain) UIView *titleView; 

3: 中間的標題?文字

@property(nonatomic,copy) NSString *title;

4:左上方的視圖

@property(nonatomic,retain) UIBarButtonItem *leftBarButtonItem;

5:UIBarButtonItem *rightBarButtonItem 右上方的視圖

@property(nonatomic,retain) UIBarButtonItem *rightBarButtonItem;
Segue

Storyboard上每?根用來介面跳轉的線,都是一個UIStoryboardSegue對象(簡稱Segue)

Segue的屬性
每一個Segue對象,都有3個屬性
1: 唯一標識

@property (nonatomic, readonly) NSString *identifier;

2: 來源控制器

@property (nonatomic, readonly) id sourceViewController;

3:目標控制器

@property (nonatomic, readonly) id destinationViewController;

Segue的類型
根據Segue的執行(跳轉)時刻,Segue可以分為2?大類型
1: 自動型:點擊某個控制項後(?如按鈕),自動執行Segue,?動完成界?跳轉。

● 按住Control鍵,直接從控制項拖線到目標控制器例如:    點擊“登入”按鈕後,就會自動跳轉到右邊的控制器,如果點擊某個控制項後,不需要做任何判斷,一定要跳轉到下一個界?面,建議使?用“?動型Segue”

2:手動型:需要通過寫代碼手動執?Segue,才能完成介面跳轉。
按住Control鍵,從來源控制器拖線到目標控制器

需要唯一標示符:

在恰當的時刻,使用perform方法執行對應的Segue

[self performSegueWithIdentifier:@"login2contacts" sender:nil];// Segue必須由來源控制器來執行,也就是說,這個perform?法必須由來源控制器來調?

如果點擊某個控制項後,需要做一些判斷,也就是說:滿足?定條件後才跳轉到下?個界?, 建議使用“?動型Segue”

所以 要不要判斷或者說能不能直接跳轉,是判斷使用那種類型的segue的重要標準。

performSegueWithIdentifier:sender:

1:利用performSegueWithIdentifier:?法可以執?行某個Segue,完成界?面跳轉。

2:performSegueWithIdentifier:sender:?法的完整執行過程

[self performSegueWithIdentifier:@“login2contacts” sender:nil];// 這個self是來源控制器

3:根據identifier去storyboard中找到對應的線,建立UIStoryboardSegue對象
? 設定Segue對象的sourceViewController(來源控制器)
? 建立並且設定Segue對象的destinationViewController(?標控制器)

4:調用sourceViewController的下面方法,做一些跳轉前的準備工作並且傳入建立好的 Segue對象

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender: (id)sender;// 這個sender是當初performSegueWithIdentifier:sender:中傳?入的sender

5:調?Segue對象的- (void)perform;方法開始執?介面跳轉操作
? 取得sourceViewController所在的UINavigationController
? 調?用UINavigationController的push方法將destinationViewController壓入棧中,完成跳轉。

控制器的資料傳遞

原理:Sender參數的傳遞

[self performSegueWithIdentifier:@“login2contacts” sender:@“jack”];//@“jack”指的是下面的sender//- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;

控制器之間的資料傳遞主要有2種情況:順傳和逆傳
? 順傳
控制器的跳轉方向: A–》C
資料的傳遞方向 : A–》C
資料的傳遞?方式 : 在A的prepareForSegue:sender:?法中根據segue參數取得 destinationViewController, 也就是控制器C, 直接給控制器C傳遞資料
(要在C的viewDidLoad?法中取得資料,來賦值給界?上的UI控制項)

? 逆傳
控制器的跳轉?向: A–》C
資料的傳遞?向: C–》A
資料的傳遞?式: 讓A成為C的代理, 在C中調用A的代理?法,通過代理?法的參數傳遞資料給A。

擴充
UITabBarController:
跟UINavigationController類似,UITabBarController也可以輕鬆地管理多個控制器,輕鬆 完成控制器之間的切換,典型例?就是QQ、等應?。

控制器的生命週期方法

簡單一個圖:方法都在裡面

ps:建立iOS交流學習群:304570962 可以加貓貓QQ:1764541256 或則znycat 讓我們一起努力學習吧。
翟乃玉的部落格
地址:http://blog.csdn.net/u013357243?viewmode=contents

貓貓學IOS(二十三)UI之控制器管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.