一认然、自定義的導航條
- 設(shè)置所有導航條的
背景圖片
文字屬性等
+(void)initialize
{
/** 設(shè)置UINavigationBar */
UINavigationBar *nav = [UINavigationBar appearance];
// 導航欄背景色圖片
[nav setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault];
// 設(shè)置文字標題屬性
NSMutableDictionary *titleAttr = [NSMutableDictionary dictionary];
titleAttr[NSFontAttributeName] = [UIFont systemFontOfSize:20];
[nav setTitleTextAttributes:titleAttr];
}
補充:為什么用+(void)initialize
方法
- initialize 方法類似一個懶加載樊展,如果沒有使用這個類购城,那么系統(tǒng)默 認不會去調(diào)用這個方法应结,且默認只加載一次刨疼;+ initialize 很有趣,因為它是懶調(diào)用的鹅龄,也有可能完全不被調(diào)用揩慕。
- initialize 的調(diào)用發(fā)生在 +init 方法之前。
- load 方法會在加載類的時候就被調(diào)用扮休,也就是 ios 應用啟動的時候迎卤,就會加載所有的類,就會調(diào)用每個類的 + load 方法玷坠。
- 重寫push方法-(主要是跳轉(zhuǎn)控制器時的
返回
)
/**
* 重寫push方法的目的 : 攔截所有push進來的子控制器
*
* @param viewController 剛剛push進來的子控制器
*/
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
// // 如果viewController不是最早push進來的子控制器
if (self.childViewControllers.count > 0) {
// 左上角“返回“
UIButton *back = [UIButton buttonWithType:UIButtonTypeCustom];
[back setImage: [UIImage imageNamed:@"navigationButtonReturn"] forState:UIControlStateNormal];
[back setImage: [UIImage imageNamed:@"navigationButtonReturnClick"] forState:UIControlStateSelected];
[back setTitle:@"返回" forState:UIControlStateNormal];
[back setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[back setTitleColor:[UIColor lightGrayColor] forState:UIControlStateSelected];
[back sizeToFit];
// 監(jiān)聽返回
[back addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside];
viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:back];
// 隱藏底部tabbar
viewController.hidesBottomBarWhenPushed = YES;
}
[super pushViewController:viewController animated:YES];
}
-(void)back
{
[self popViewControllerAnimated:YES];
}
二蜗搔、導航欄的標題
在各自的控制器里設(shè)置
第一種:標題為圖片
// 標題
self.navigationItem.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MainTitle"]];
imageView的創(chuàng)建方式有兩種:
[imageView alloc] init]
: 創(chuàng)建完沒有尺寸
[imageView alloc] initWithImage:~~~]
: 只要圖片傳進去,圖片大小 = imageVIew的大小
第二種:標題為文字
// 標題
self.navigationItem.title = @"我的關(guān)注";
三八堡、導航欄左右角的UIBarButtonItem
所有控制器的導航條的UIBarButtonItem
,可抽取出來樟凄,做個UIBarButtonItem
的Category
+(instancetype)itemWithImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action
{
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
[btn setImage:[UIImage imageNamed:image] forState:UIControlStateNormal];
[btn setImage:[UIImage imageNamed:highImage] forState:UIControlStateHighlighted];
[btn addTarget:target action:action forControlEvents:UIControlEventAllTouchEvents];
[btn sizeToFit];
return [[self alloc] initWithCustomView:btn];
}
各控制器設(shè)置左右角item
第一種:
// 左上角
self.navigationItem.leftBarButtonItem = [UIBarButtonItem itemWithImage:@"MainTagSubIcon" highImage:@"MainTagSubIconClick" target:self action:@selector(tagClick)];
第二種:
// 右邊——設(shè)置
UIBarButtonItem *settingItem = [UIBarButtonItem itemWithImage:@"mine-setting-icon" highImage:@"mine-setting-icon-click" target:self action:@selector(settingClick)];
// 右邊——月亮
UIBarButtonItem *moonItem = [UIBarButtonItem itemWithImage:@"mine-moon-icon" highImage:@"mine-moon-icon-click" target:self action:@selector(settingClick)];
// 右邊
self.navigationItem.rightBarButtonItems = @[settingItem, moonItem];