UINavigationController,UINavigationBar,UINavigationItem,UIViewController的相互關係

weixin_33797791發表於2017-06-25

專案中出現率很高的幾個角色,簡單說一下相互關係
1.本質
UIViewController : 基本上一個控制器對應著一個具體的頁面
UINavigationController : 繼承於UIViewController ,是管理一系列控制器的容器。有一個UINavigationBar的屬性
UINavigationBar:繼承與UIView,是每一個控制器上方的檢視,可以做一定的定製,由UINavigationController管理
UINavigationItem : 繼承於NSObject,給UINavigationBar檢視提供內容,由UIViewcontroller管理

2.關係圖

1937060-6c40336a30f017cf.png
四者關係圖.png

3.一些簡單應用
a:更改導航欄的文字和背景顏色

//set NavigationBar 背景顏色&title 顏色  
[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.0 green:155/255.0 blue:213/255.0 alpha:1.0]];  
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor whiteColor],UITextAttributeTextColor,nil]];

b:新增多個按鈕item

UIBarButtonItem *shareItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action: nil nil];  
UIBarButtonItem *cameraItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera target:self action: nil nil];  
NSArray *itemsArr = @[shareItem,cameraItem];  
self.navigationItem.rightBarButtonItems = itemsArr;  

c:自定義後退按鈕的文字和顏色

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];  
self.navigationItem.backBarButtonItem = item;  

d:自定義返回item

//自定義返回按鈕  
UIImage *backButtonImage = [[UIImage imageNamed:@"fanhui.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 30, 0, 0)];  
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];  
//將返回按鈕的文字position設定不在螢幕上顯示  
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSIntegerMin, NSIntegerMin) forBarMetrics:UIBarMetricsDefault]; 

相關文章