一、導(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方法;