學(xué)習(xí)iOS自定義導(dǎo)航控制器UINavigationController
自定義導(dǎo)航控制器: 將導(dǎo)航控制器中通用的部分拿出來(lái)統(tǒng)一設(shè)置
1、一般導(dǎo)航條標(biāo)題的字體setTitleTextAttribute和背景顏色setBackgroundImage都是統(tǒng)一的,可以在load方法中使用appearanceWhenContainedIn統(tǒng)一設(shè)置
2、一般導(dǎo)航條的返回按鈕需要自定義,一般除了棧底控制器有導(dǎo)航條,其他控制器都需要隱藏底部的條,可以重寫(xiě)pushViewController:animated:方法,在該方法中實(shí)現(xiàn)該功能
3、導(dǎo)航控制器右滑返回效果(觸摸屏幕的任意一點(diǎn),向右滑動(dòng)返回)
UIViewController
--navigationItem
leftBarButtonItem | leftBarButtonItems
NSString title | UIView titleView
rightBarButtonItem | rightBarButtonItems
backBarButtonItem
#import "BWNavigationController.h" #import "UIBarButtonItem+Item.h" @interface BaseNavigationController () <UIGestureRecognizerDelegate> @end @implementation BWNavigationController + (void)load { [super load]; UINavigationBar *navigationBar = [UINavigationBar appearanceWhenContainedIn:self, nil]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; dict[NSFontAttributeName] = [UIFont boldSystemFontOfSize:20]; [navigationBar setTitleTextAttributes:dict]; [navigationBar setBackgroundImage:[UIImage imageNamed:@"navigationbarBackgroundWhite"] forBarMetrics:UIBarMetricsDefault]; } - (void)viewDidLoad { [super viewDidLoad]; // 屏幕邊緣滑動(dòng)(只能在屏幕的邊緣才能觸發(fā)該手勢(shì),不能在屏幕的任意一點(diǎn)觸發(fā)該手勢(shì)) UIScreenEdgePanGestureRecognizer *edgePanGestureRecognizer = (UIScreenEdgePanGestureRecognizer *)self.interactivePopGestureRecognizer; // 滑動(dòng)手勢(shì)(禁用系統(tǒng)自帶的屏幕邊緣滑動(dòng)手勢(shì),使用自定義的滑動(dòng)手勢(shì)目的就是達(dá)到觸摸屏幕上的任意一點(diǎn)向右滑動(dòng)都能實(shí)現(xiàn)返回的效果) UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:edgePanGestureRecognizer.delegate action:@selector(handleNavigationTransition:)]; panGestureRecognizer.delegate = self; [self.view addGestureRecognizer:panGestureRecognizer]; // 禁用系統(tǒng)的屏幕邊緣滑動(dòng)手勢(shì) edgePanGestureRecognizer.enabled = NO; } // 是否允許觸發(fā)手勢(shì),如果是根視圖控制器則不需要 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { return self.childViewControllers.count > 1; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated { // 統(tǒng)一設(shè)置返回按鈕 NSInteger count = self.childViewControllers.count; if (count > 0) { viewController.hidesBottomBarWhenPushed = YES; viewController.navigationItem.leftBarButtonItem = [UIBarButtonItem backBarButtonItemWithImage:[UIImage imageNamed:@"navigationButtonReturn"] highlightImage:[UIImage imageNamed:@"navigationButtonReturnClick"] tagert:self action:@selector(back) title:@"返回"]; } [super pushViewController:viewController animated:animated]; } - (void)back { [self popViewControllerAnimated:YES]; } @end
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 實(shí)例講解iOS中的UIPageViewController翻頁(yè)視圖控制器
- iOS開(kāi)發(fā)中導(dǎo)航控制器的基本使用教程
- 詳解iOS開(kāi)發(fā)中使用storyboard創(chuàng)建導(dǎo)航控制器的方法
- iOS應(yīng)用開(kāi)發(fā)中UITabBarController標(biāo)簽欄控制器使用進(jìn)階
- iOS開(kāi)發(fā)中的ViewController轉(zhuǎn)場(chǎng)切換效果實(shí)現(xiàn)簡(jiǎn)介
- iOS AVPlayer切換播放源實(shí)現(xiàn)連續(xù)播放和全屏切換的方法
- iOS使用pageViewController實(shí)現(xiàn)多視圖滑動(dòng)切換
- 比較IOS開(kāi)發(fā)中常用視圖的四種切換方式
- iOS 頁(yè)面滑動(dòng)與標(biāo)題切換顏色漸變的聯(lián)動(dòng)效果實(shí)例
- iOS實(shí)現(xiàn)多控制器切換效果
相關(guān)文章
iOS使用GCDSocketManager實(shí)現(xiàn)長(zhǎng)連接的方法
下面想就為大家分享一篇iOS使用GCDSocketManager實(shí)現(xiàn)長(zhǎng)連接的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12iOS開(kāi)發(fā)WebViewJavascriptBridge通訊原理解析
這篇文章主要為大家介紹了iOS開(kāi)發(fā)WebViewJavascriptBridge通訊原理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Flutter列表滾動(dòng)定位超強(qiáng)輔助庫(kù)使用示例詳解
這篇文章主要為大家介紹了Flutter列表滾動(dòng)定位超強(qiáng)輔助庫(kù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問(wèn)題
至今很多iOS App還要照顧到iOS 7進(jìn)行最低的版本適配,而iOS7開(kāi)始status bar的實(shí)際屏幕占用情況與iOS 6等不盡相同,這里我們就來(lái)以圖文講解如何解決App的iOS 7頂部狀態(tài)欄適配問(wèn)題2016-06-06iOS基于UIScrollView實(shí)現(xiàn)滑動(dòng)引導(dǎo)頁(yè)
這篇文章主要為大家詳細(xì)介紹了iOS基于UIScrollView實(shí)現(xiàn)滑動(dòng)引導(dǎo)頁(yè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01iOS開(kāi)發(fā)中使用UIDynamic來(lái)捕捉動(dòng)畫(huà)組件的重力行為
這篇文章主要介紹了iOS開(kāi)發(fā)中使用UIDynamic來(lái)捕捉動(dòng)畫(huà)組件的重力行為的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-12-12