国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS開(kāi)發(fā)中視圖切換的方法

2020-02-19 15:50:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

? ? ? ?在ios的開(kāi)發(fā)中總是會(huì)頻繁的切換視圖,而且在實(shí)際開(kāi)發(fā)過(guò)程中獨(dú)立的視圖并不是很常見(jiàn),除非是很簡(jiǎn)單的應(yīng)用,那你知道ios開(kāi)發(fā)中視圖切換的方法有哪些嗎?

? ? ? ?一、視圖切換

  1. UITabBarController (分頁(yè)控制器) - 平行管理視圖
  2. UINavigationController (導(dǎo)航控制器) - 壓棧出棧管理視圖
  3. 模態(tài)窗口

? ? ? ?二、UITabBarController分頁(yè)控制器

  1. UITabBarController是為了利用 頁(yè)簽切換視圖 設(shè)計(jì)的控制器
  2. 該控制器有一個(gè)UITabBar控件,用戶(hù)通過(guò)點(diǎn)擊UITabBar進(jìn)行視圖切換
  3. UITabBarController本身會(huì)不顯示任何視圖,它只是一個(gè) 容器控制器
  4. 為了減少視圖間的耦合,所有UITabBarController的子視圖的相關(guān)標(biāo)題、圖標(biāo)等信息由子視圖自己控制

? ? ? ?注意事項(xiàng):

  1. UITabBarController會(huì)一次性初始化所有子控制器,但默認(rèn)只加載第一個(gè)控制器視圖
  2. 每個(gè)視圖控制器都有一個(gè)tabBarController屬性,用它來(lái)訪問(wèn)所在的UITabBarController
  3. 每個(gè)視圖控制器都有一個(gè)tabBarItem屬性,用它來(lái)控制UITabBarController的UITabBar上的顯示信息
  4. tarBarItem的image屬性必須是png格式,并且打開(kāi)alpha通道 ,否則無(wú)法正常顯示
  5. UITabBarController通常是作為整個(gè)程序的rootViewController的,我們需要在程序的window顯示之前就創(chuàng)建好它。

? ? ? ?具體步驟如下:

  1. 創(chuàng)建一個(gè)UITabBarController對(duì)象
  2. 創(chuàng)建UITabBarController中每一個(gè)tab對(duì)應(yīng)的要顯示的對(duì)象viewController
  3. 通過(guò)UITabBarController的viewControllers屬性將要顯示的所有viewController添加到UITabBarController中
  4. 通過(guò)設(shè)置UITabBarController對(duì)象為window.rootViewController,然后顯示window

//a.初始化一個(gè)tabBar控制器
UITabBarController *tarbarVC = [[UITabBarController alloc] init];
//設(shè)置控制器為Window的根控制器
self.window.rootViewController = tarbarVC;
//b.創(chuàng)建子控制器
UIViewController *c1 = [[UIViewController alloc] init];
c1.view.backgroundColor = [UIColor grayColor];
c1.view.backgroundColor=[UIColor greenColor];
c1.tabBarItem.title = @"消息";
c1.tabBarItem.image = [UIImage imageNamed:@"tab_recent_nor"];
c1.tabBarItem.badgeValue = @"123";
UIViewController *c2 = [[UIViewController alloc] init];
c2.view.backgroundColor = [UIColor brownColor];
c2.tabBarItem.title = @"聯(lián)系人";
c2.tabBarItem.image = [UIImage imageNamed:@"tab_buddy_nor"];
UIViewController *c3 = [[UIViewController alloc] init];
c3.tabBarItem.title = @"動(dòng)態(tài)";
c3.tabBarItem.image = [UIImage imageNamed:@"tab_qworld_nor"];
UIViewController *c4 = [[UIViewController alloc] init];
c4.tabBarItem.title = @"設(shè)置";
c4.tabBarItem.image = [UIImage imageNamed:@"tab_me_nor"];
//c.添加子控制器到ITabBarController中
tarbarVC.viewControllers = @[c1,c2,c3,c4];
//d.設(shè)置Window為主窗口并顯示出來(lái)
[self.window makeKeyAndVisible];

? ? ? ?UITabBarControllerDelegate代理


#pragma mark 該方法用于控制TabBarItem能不能選中
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;

? ? ? ?改變UITabBarController當(dāng)前顯示視圖的方法

  1. 改變selectedIndex屬性
  2. 改變selectedViewController屬性
  3. 改變viewControllers屬性

? ? ? ?三、UINavigationController導(dǎo)航控制器

  1. UINavigationController中的子控制器以棧的形式存儲(chǔ),只有在棧頂部的控制器才能顯示在界面上
  2. 壓棧pushController,出棧popController
  3. UINavigationController必須有一個(gè)根控制器rootViewController
  4. 子控制器通過(guò)navigationController屬性訪問(wèn)UINavigationController
  5. 在棧中的子控制器都有一個(gè)導(dǎo)航欄navigationBar,通過(guò)navigationItem去控制


? ? ? ?UINavigationItem屬于MVC中的Model,封裝了要顯示在UINavigationBar上的數(shù)據(jù):

title: 標(biāo)題
titleView :標(biāo)題視圖
leftBarButtonItem :左按鈕
rightBarButtonItem :右按鈕

? ? ? ?下一個(gè)子視圖左側(cè)返回按鈕leftBarButtonItem的標(biāo)題優(yōu)先級(jí):

  1. 導(dǎo)航欄返回按鈕backBarButtonItem的標(biāo)題
  2. 導(dǎo)航欄navigationItem的標(biāo)題
  3. 視圖控制器的標(biāo)題

? ? ? ?UINavigationController常用的主要方法:


#pragma mark 壓棧,把控制器壓入導(dǎo)航控制器子控制器棧中
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;
#pragma mark 出棧,把導(dǎo)航控制器子控制器棧的棧頂彈出
- (void)popViewControllerAnimated:(BOOL)animated;
#pragma mark 多次出棧直到棧頂為指定控制器
- (void)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;
#pragma mark 多次出棧直到棧頂為根控制器
- (void)popToRootViewControllerAnimated:(BOOL)animated;

四、模態(tài)窗口


#pragma mark 從下方彈出指定的視圖控制器,賦予模態(tài),即當(dāng)前視圖關(guān)閉前,其他視圖上的內(nèi)容無(wú)法操作
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion;
#pragma mark 關(guān)閉模態(tài)窗口,該方法在模態(tài)窗口中調(diào)用
- (void)dismissViewControllerAnimated:(BOOL)flag completion:(void (^)(void))completion;

? ? ? ?希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)武林技術(shù)頻道的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南安市| 苗栗县| 静乐县| 奉贤区| 湘乡市| 威海市| 丰原市| 随州市| 潼南县| 罗城| 论坛| 白河县| 若羌县| 嵊州市| 安泽县| 布尔津县| 疏勒县| 红河县| 恩平市| 穆棱市| 香港 | 舟山市| 武夷山市| 池州市| 延安市| 莱州市| 镇巴县| 荣成市| 武定县| 宁陕县| 蓝田县| 任丘市| 山西省| 丰镇市| 瓦房店市| 黄浦区| 芦溪县| 台北市| 巴林左旗| 藁城市| 黄梅县|