UINavigationController

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

?1、概念: ?導(dǎo)航控制器是iOS中最常用的多視圖控制器之一,它用來(lái)管理多個(gè)視圖控制器,導(dǎo)航控制器可以認(rèn)為是管理控制器的控制器,主要管理有層級(jí)關(guān)系的控制器。

2、UINavigationController繼承于UIViewController,以棧的方式管理所控制的視圖控制器,至少要有以一個(gè)被管理的視圖控制器,這個(gè)控制器我們稱作為導(dǎo)航控制器的根視圖控制器

3、任何繼承自UIViewController的類(多態(tài))都可以作為根控制器

4、工作原理

? ? UINavigationController通過(guò)棧的方式管理控制器的切換,控制入棧和出棧,來(lái)展示各個(gè)視圖控制器。UINavigationController的ContentView?里始終顯?示棧頂控制器的view。

viewControllers屬性存儲(chǔ)了棧中的所有被管理的控制器

navigationController屬性,?父類中的屬性,每個(gè)在棧中的控制器,都能通 過(guò)此屬性,獲取?自?己所在的UINavigationController對(duì)象。

5、實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)

pushViewController:animated//進(jìn)入下一個(gè)控制器

popViewControllerAnimated://返回上一個(gè)視圖控制器

popToViewController:animated//返回到指定的視圖控制器

popToRootViewControllerAnimated//返回到根視圖控制器

6、常見(jiàn)屬性

(1)viewControllers//所有處于棧中的控制器

(2)topViewController//位于棧頂?shù)目刂破?/p>

(3)visibleViewController//當(dāng)前正在顯示的控制器

(4)navigationBar//導(dǎo)航條

7、向下跳

SecondViewController *sencondVC=[[SecondViewController] ALLOC

init];

[self.navigationController pushViewController:secondVC animated:YES];

8、向上跳

[self.navigationController popViewControllerAnimated:YES];

//?[self.navigationController?popToRootViewControllerAnimated:YES];

SecondViewController*?secondVC?=?[self.navigationController.viewControllersobjectAtIndex:0];

[self.navigationControllerpopToViewController:secondVCanimated:YES];

9、navigationBar—導(dǎo)航條,iOS7之后默認(rèn)是透明的,iOS7之前默認(rèn)是不

透明的。 navigationBar在透明情況,與contentView會(huì)重合?一部分區(qū)域。

navigationBar在不透明情況,contentView跟在navigationBar的下?面。 navigationBar豎屏下默認(rèn)?高度44,橫屏下默認(rèn)?高度32.

UINavigationBar除了能定義?自?身的樣式外,還管理?一組

UINavigationItem。 與UINavigationController相似,UINavigationBar也是以棧的?方式管

理?一組UINavigationItem。提供push和pop操作item。

每個(gè)視圖控制器都有?一個(gè)navigationItem屬性。navigationItem中設(shè) 置的左按鈕、右按鈕、標(biāo)題等,會(huì)隨著控制器的顯?示,也顯?示到 navigationBar上;

//====================

10、UINavigationItem:

? ? ?UINavigationItem屬于MVC中的M。封裝了要顯?示在UINavigationBar上的數(shù)據(jù)。UIBarButtonItem屬于MVC的M。定義了UINavigationItem上按鈕的觸發(fā)事件,外觀等

12、initWithBarButtonSystemItem:target:action:

-initWithTitle:style:target:action: -initWithImage:style:target:action: tintColor;

RootViewController* rootVC = [[RootViewControlleralloc]init];

UINavigationController*?nvc?=?[[UINavigationControlleralloc]initWithRootViewController:rootVC];

//?nvc.navigationBar.backgroundColor?=?[UIColor?redColor];

//?nvc.navigationBar.tintColor?=?[UIColor?redColor];

nvc.navigationBar.translucent=YES;

nvc.navigationBar.barStyle=?UIBarStyleBlack;

UIImage*?image?=?[UIImageimageNamed:@"bd_logo1.png"];

[nvc.navigationBarsetBackgroundImage:imageforBarMetrics:UIBarMetricsDefault];

UIView* view = [[UIViewalloc]init];

view.frame=?CGRectMake(0,200,20,20);

view.backgroundColor=?[UIColorbrownColor];

self.navigationItem.title=@"郭仔";

self.navigationItem.titleView=?view;

[viewrelease];

UIBarButtonItem*btnItem?=?[[UIBarButtonItemalloc]initWithBarButtonSystemItem:UIBarButtonSystemItemBookmarkstarget:selfaction:nil];

self.navigationItem.rightBarButtonItem=?btnItem;

[btnItemrelease];

UIImage*?img?=?[[UIImageimageNamed:@"4.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

UIBarButtonItem*?leftImage?=?[[UIBarButtonItemalloc]initWithImage:imgstyle:UIBarButtonItemStyleBorderedtarget:selfaction:nil];

self.navigationItem.leftBarButtonItem=?leftImage;

13、頁(yè)面?zhèn)髦担?br>

一種是屬性傳值;

一種是代理傳值;

/*

屬性傳值:如果從A頁(yè)面往B頁(yè)面?zhèn)髦?,在B頁(yè)面中聲明屬性,在A頁(yè)面中跳轉(zhuǎn)事件中給B頁(yè)面的屬性賦值;

從后一個(gè)頁(yè)面返回前一個(gè)頁(yè)面不會(huì)執(zhí)行前面頁(yè)面的loadView和viewDidLoad方法,而是執(zhí)行viewWillAppear方法,因?yàn)?,loadView和viewDidLoad方法的作用是將視圖加載到內(nèi)存,而從后一個(gè)頁(yè)面返回時(shí),前一個(gè)頁(yè)面已經(jīng)加載到內(nèi)存,所以不用再次加載,所以不執(zhí)行l(wèi)oadView和ViewDidLoad方法;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容