如何完全自定义NavigationBar
NavigationBar是很常用的一個(gè)元素,所以常常需要進(jìn)行自定義操作,而一種比較直觀的方式就是,先定義一個(gè)類NavigationBar繼承自UINavigationBar,而這個(gè)NavigationBar的內(nèi)部?jī)?nèi)容則是比較復(fù)雜的了,里面添加我們需要的所有的navigationBar 的樣式,而且使得這些view的尺寸都是整個(gè)NavigationBar的尺寸,然后再進(jìn)行內(nèi)部view的構(gòu)建就可以了,而需要進(jìn)行切換的時(shí)候就進(jìn)行這些view之間的顯示和隱藏的切換就可以了,最好使用一些動(dòng)畫(huà),前面的文中有提供動(dòng)畫(huà)流暢的保證方式,現(xiàn)在新建一個(gè)HomeNavigationController 繼承自UINavigationController,并且在這個(gè)類的實(shí)現(xiàn)中這樣操作
@implementation HomeNavigationController -(instancetype)init {self = [super initWithNavigationBarClass:[Navigationbar class] toolbarClass:nil];if (self) {self.delegate = self;}return self; }這樣的話就將HomeNavigationController的導(dǎo)航欄的樣式進(jìn)行了確定了。而為了能進(jìn)行子控制器的導(dǎo)航欄的正確顯示,最好在HomeNavigationController中聲明一個(gè)
@protocol SecretPresentableViewController <NSObject>@optional - (void)willPresentWithNavigationBar:(Navigationbar *)navigationBar; @end而那些想要擁有這個(gè)導(dǎo)航欄的自控制器只需要實(shí)現(xiàn)協(xié)議就可以了,而NavigationBar中的多個(gè)view的左右按鈕以及中間都可以完全的自定義了,而事件 的傳遞則使用block的方式,這里提供其中一個(gè)自定義view的h定義方式
@interface HomeNavigationView : UIView @property(nonatomic, copy) void (^didTapComposeBlock)(void); @property(nonatomic, copy) void (^didTapNotificationsBlock)(void); @property(nonatomic, copy) void (^didTapChatBlock)(void); @property(nonatomic, copy) void (^didTapScrollToTopBlock)(void); @property(nonatomic, copy) void (^didTapNewThemeTopBlock)(void);@property (nonatomic, strong) UILabel* titleLabel; @property (nonatomic, strong) UIButton *tipsNewThemeBtn; @property (nonatomic, strong) UIButton *unreadLeftV; @end而在m文件中只要對(duì)按鈕添加監(jiān)聽(tīng)就可以了,例子是
#pragma private -(void)left:(id)sender {if (_didTapNotificationsBlock) _didTapNotificationsBlock();}在擁有navigationBar 的控制器中對(duì)具體的block進(jìn)行處理
navigationBar.homeNavigationView.didTapNotificationsBlock = ^{[self left:nil];};而里面使用的這個(gè)left:方法則正是這個(gè)控制器中的具體的處理方法(push,modal,或者按鈕的消失,lable的隱藏等等的點(diǎn)擊相應(yīng)等等),這樣的話就實(shí)現(xiàn)了自定義bar的同時(shí)而且實(shí)現(xiàn)了bar和控制器之間的無(wú)縫銜接。更加方便的進(jìn)行自定義的操作,但同時(shí)也可以完全實(shí)現(xiàn)系統(tǒng)提供bar的所有功能等等,而這個(gè)具體的實(shí)現(xiàn)過(guò)程很有可能就是apple自己內(nèi)部的實(shí)現(xiàn)方式,因?yàn)閍pple很推薦我們使用block而這種bar和viewcontrol的傳遞消息的方式感覺(jué)這是最優(yōu)秀的了。
轉(zhuǎn)載于:https://www.cnblogs.com/azxfire/p/4095487.html
總結(jié)
以上是生活随笔為你收集整理的如何完全自定义NavigationBar的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据库死锁语句脚本
- 下一篇: Daily Scrum9 11.13