1. 程式人生 > >iOS重寫系統中的UINavigationController返回按鈕的事件

iOS重寫系統中的UINavigationController返回按鈕的事件

以下主要幫助朋友們監聽iOS系統的UINavigationController返回按鈕的事件,主要有兩種方案

第一種方案就是大家都能想到的,也是最簡單的,程式碼如下:

-(void)viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];
}

因為,點選導航條的返回按鈕後,首先觸發的事件就是當前頁面消失,變得不可見,這確實是一個行之有效的方案。

第二種方案就是重寫系統中的UINavigationController返回按鈕監聽事件,具體程式碼和實現說明如下:

1.擴充套件UIviewController
UIViewController+BackButtonHandler.h

#import <UIKit/UIKit.h>
@protocol BackButtonHandlerProtocol <NSObject>
@optional
// Override this method in UIViewController derived class to handle 'Back' button click
-(BOOL)navigationShouldPopOnBackButton;
@end
@interface UIViewController (BackButtonHandler) <BackButtonHandlerProtocol>
@end
UIViewController+BackButtonHandler.m檔案

 #import "UIViewController+BackButtonHandler.h"

@implementation UIViewController (BackButtonHandler)

@end
2.擴充套件UINavigationController ,也可以繼承 使用

@implementation UINavigationController (ShouldPopOnBackButton)

- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem*)item {

if([self.viewControllers count] < [navigationBar.items count]) {
 return YES;
}

BOOL shouldPop = YES;
UIViewController* vc = [self topViewController];
if([vc respondsToSelector:@selector(navigationShouldPopOnBackButton)]) {
shouldPop = [vc navigationShouldPopOnBackButton];
}

if(shouldPop) {
dispatch_async(dispatch_get_main_queue(), ^{
[self popViewControllerAnimated:YES];
});
} else {
// Workaround for iOS7.1. Thanks to @boliva - http://stackoverflow.com/posts/comments /34452906
for(UIView *subview in [navigationBar subviews]) {
if(subview.alpha < 1.) {
[UIView animateWithDuration:.25 animations:^{
subview.alpha = 1.;
}];
}
}
}

return NO;
}

@end
3.測試使用

#import "ViewController.h
#import "UIViewController+BackButtonHandler.h"

@implementation ViewController

-(void) viewDidLoad
{
[super viewDidLoad];
self.title =  [NSString stringWithFormat:@"Screen-%d", self.navigationController.viewControllers.count];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Next" style:UIBarButtonItemStylePlain
 target:selfaction:@selector(onNextBtn:)];
}

-(void) onNextBtn:(id)sender
{
[self.navigationController pushViewController:[ViewController new] animated:YES];
}

-(BOOL) navigationShouldPopOnBackButton ///在這個方法裡寫返回按鈕的事件處理
{

//這裡寫要處理的程式碼
 [self.navigationController popViewControllerAnimated:YES];
return YES;//返回NO 不會執行

}

具體怎麼選擇看個人需要,希望能幫助到各位!

相關推薦

iOS重寫系統UINavigationController返回按鈕事件

以下主要幫助朋友們監聽iOS系統的UINavigationController返回按鈕的事件,主要有兩種方案 第一種方案就是大家都能想到的,也是最簡單的,程式碼如下: -(void)viewWillDisappear:(BOOL)animated{ [super v

iOS 攔截導航欄返回按鈕事件(只攔截點選事件不改變系統按鈕樣式)

#import <UIKit/UIKit.h> @protocol BackButtonHandlerProtocol <NSObject> @optional /** 重寫下面的方法以攔截導航欄返回按鈕點選事件,返回 YES 則 pop,NO 則不 pop @

IOS系統監聽返回按鈕處理方式

pushHistory();       window.addEventListener("popstate", function(e) {           alert("我監聽到了瀏覽器的返回按鈕事件啦");//根據自己的需求實現自己的功能   }, false); 

監聽瀏覽器返回按鈕事件

監聽 app tlist alert 自己的 div listener 實現 rip pushHistory(); window.addEventListener("popstate", function(e) { /

HTML5 瀏覽器返回按鈕/手機返回按鈕事件監聽

手機 鎖定 listitem con 按鈕 spa color cnblogs java 1.HTML5 History對象 支持使用pushState()方法修改地址欄地址,而不刷新頁面。 popstate事件 當history實體被改變時,popstate事件將會發生

ionic3 導航欄返回按鈕事件設定 多級頁面返回到指定的頁面

借鑑原文地址 多級頁面返回到指定的頁面 export class Page { @ViewChild(Navbar) navBar: Navbar; ① ionViewDidLoad() { ② this.navBar.backButtonCli

監聽微信返回按鈕事件

開發很多時候針對不同的機型會有不同的差異,安卓一般左上方只有關閉按鈕,而iphone則有返回和關閉兩個按鈕; 如何監聽微信返回按鈕的點選事件,請看以下程式碼: $(function(){ //

js監聽微信瀏覽器返回按鈕事件

pushHistory(); window.addEventListener("popstate", function(e) { alert("好嗨喲,感覺到達了人生巔峰!");//根據自己的需求實現的功能 }, false); function pushHistory()

如何監聽小程式返回按鈕事件

寫在前面 為了能及時的將自己踩到的前端坑(包括ionic,angular,react,ReactNative,小程式,APICloud)分享給大家,以後會逐漸將文章轉移到微信公眾號:前端e家(front_e_family)。可直接掃碼關注,公眾號會不定期更新新文

iOS 攔截系統自帶的Pop事件

攔截系統自帶的Pop事件 首先,在開發中我遇到一個問題,用故事版將控制器連線起來,之後就有了系統自帶的返回按鈕(大家都知道,說的很直白)。 當我想點選返回按鈕的時候,根據自己的情況再確定反不反回上一個控

js獲取瀏覽器返回按鈕事件

前面要加上jquery 比如<script src="style/jquery.min.js"></script> 監聽事件 jQuery(document).ready(function($) { if (window.history &

監聽頁面返回事件或者移動端返回按鈕事件

sta lis tle tor tlist 需求 url () history pushHistory(); window.addEventListener("popstate", function(e) { // pushHistory();

vue 專案 如何動態監聽瀏覽器以及iOS手機微信自帶的返回按鈕事件

vue搭建的頁面中,左上角的返回按鈕,我自己定義了返回的了路徑,可是當執行時,就會發現,蘋果手機的下方會有自帶的返回按鈕(安卓手機沒有),那麼這個按鈕的返回事件該如何設定呢? 一般情況下,微信自帶的返回按鈕都是返回上一個路徑,可是當我的頁面時使用者掃碼進入的,沒有上一條路徑

點選返回按鈕只能返回某一個 明確的頁面(主要是處理 ios web的)

非 ios 下面的一般程式碼如下 pc 端或者 android webview沒有問題, 但是 ios 有問題 history.pushState(null, null, document.URL)

移動端開發在iOS系統 new Date() 返回 NaN 的問題

問題:   通過 new Date() 函式將後臺返回的時間('2021-11-25')獲取時間戳。在 chrome 瀏覽器中沒有出現問題,但在 iPhone 真機測試的時候,顯示的結果不符合預期。通過除錯發現 iOS 中 new Date('2021-11-25') 返回的結果是 NaN,問題出現的原因是

iOS導航欄 修改系統返回按鈕

//設定系統返回按鈕不帶文字  [[UIBarButtonItemappearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(NSInt

Web丨IOS系統下Safari瀏覽器div點選事件無效的解決辦法:

1、把 div 改換為 a、button 等具有可點選性的標籤元素,新增 curson:pointer 滑鼠樣式 2、把點選事件直接繫結到需要點選的標籤上,而不是其祖先級,儘量不要用事件委託 曾在兩個專案中適配 IOS 手機端 Safari 瀏覽器時遇

iOS 返回按鈕

tro tint button item 返回 self. set col uic UIBarButtonItem *backItem = [[UIBarButtonItem alloc] init]; backItem.title =@"返回"; sel

關於微信手機端IOS系統input輸入框無法輸入的問題

inpu input mil net 手機端 family 輸入 tails 覆蓋 把-webkit-user-select:none改成-webkit-user-select:auto;覆蓋掉或者直接註釋掉就行! 別人家的博文:http://blog.csdn.net

IOS修改Navigation Bar上的返回按鈕文本顏色,箭頭顏色以及導航欄按鈕的顏色

img attr .com add src hit con contain title 自從IOS7後UINavigationBar的一些屬性的行為發生了變化.你可以在下圖看到: 現在,如果你要修改它們的顏色,用下面的代碼: 1 2 3 4 self