1. 程式人生 > >ios 滑動返回出現問題以及解決方法

ios 滑動返回出現問題以及解決方法

UINavigationController滑動返回,有需要的朋友可以參考下。


最近做了UINavigationController的滑動返回(IOS7及以後系統預設支援的), 主要分成以下幾步以及碰到的問題, 我這裡做個總結:

*.首先說明個普遍碰到的問題

網上普遍看到說, 在UINavigationController下自定義leftBarButtonItem會導致滑動失效, 解決方案:http://blog.csdn.net/meegomeego/article/details/25879605

但我想告訴大家, 我也是自定義了leftBarButtonItem卻沒有碰到上述問題, 我是統一寫了一個BaseViewController作為所有controller父類, 除了rootConrtoller, 這裡不知為何, 有知道的可以留言.

排除上述原因, 下面介紹下怎麼實現滑動:

1. 自定義UINavigationController(我寫了個UIBaseNavigationController)以共用, 在ViewDidLoad里加入程式碼:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    /* UINavigationControllerDelegate */
    self.delegate = self;
    
    / swipe gesture /
    __weak typeof (self)weakSelf = self;
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
//        self.interactivePopGestureRecognizer.enabled = YES;
          /* UIGestureRecognizerDelegate */
          self.interactivePopGestureRecognizer.delegate = weakSelf;
    }
}

這裡是將interactivePopGestureRecognizer.delegate賦給self. 這樣便可以實現滑動, 因為enabled預設是YES.2. 在滑動過程中你會發現如果在pushViewController的動畫過程中啟用滑動手勢會導致crash, 解決方案
/ set gesture no when pushViewController /
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([self respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        self.interactivePopGestureRecognizer.enabled = NO;
    }
    
    [super pushViewController:viewController animated:animated];
}

在push的時候關閉手勢, 這樣就不用擔心會啟用滑動3. 自然, 在當你載入完成下一個viewController之後需要啟用滑動手勢:
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
}

4. 當然, 你還會發現一個問題:在rootController下滑動的時候, 在想push到下一個頁面會沒有反應, 介面卡死在那了, 所以還需要在上述方法中加入以下程式碼:
/ set gesture yes when showViewController /
- (void)navigationController:(UINavigationController )navigationController didShowViewController:(UIViewController )viewController animated:(BOOL)animated
{
    if ([navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
        navigationController.interactivePopGestureRecognizer.enabled = YES;
    }
    
    / if rootViewController, set delegate nil /
    if (navigationController.viewControllers.count == 1) {
        navigationController.interactivePopGestureRecognizer.enabled = NO;
        navigationController.interactivePopGestureRecognizer.delegate = nil;
    }
}

在判斷當前為rootController, 設定手勢無效, 而且必須設定delegate為nil, 這樣的話就可以解決卡死的問題了.這樣的話, 就可以完成navigationcontroller下的返回滑動了, 和微信一樣一樣滴~~~~~

相關推薦

ios 滑動返回出現問題以及解決方法

UINavigationController滑動返回,有需要的朋友可以參考下。 最近做了UINavigationController的滑動返回(IOS7及以後系統預設支援的), 主要分成以下幾步以及碰到的問題, 我這裡做個總結: *.首先說明個普遍碰到的問題 網上普遍看到

Windows7 Python-3.6 安裝PyCrypto(pycrypto 2.6.1)出現錯誤以及解決方法

windows python pycrypto 今天準備在Windows系統上基於python3.6安裝一個pycrypto 2.6.1模塊,很不幸的報了一堆錯誤,如下所示:running installrunning buildrunning build_pyrunning build_extw

20180117MySQL出現Waiting for table metadata lock的原因以及解決方法

存在 ces ldb 環境 gpo open 這就是 理解 而且 轉自http://www.cnblogs.com/digdeep/p/4892953.html 轉自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MyS

IE 下js裏面new Date("2017-07-11 08:00:00") 出現NAN的問題以及解決方法

c中 ase lib tle base net mac date 說明 在js裏面用了這個方法 var $date= new Date("2017-07-11 08:00:00") 可是打印的時候為 NAN。查了下 只有IE下有這個問題,然後我找了下 ,發現只要把

使用VS2015編寫驅動時出現的部分錯誤以及解決方法

    前幾日在github上下載了一個Windows驅動的demo,原本想著直接下載下來開啟解決方案就可以用,沒想到一編譯,出現了奇奇怪怪的Error,部分Error網上也沒什麼好的解決辦法,對我這個從未深入玩過VS的人,VS的使用體驗實在是太糟糕了,以後不知道還有沒有機會繼續使用VS,

NestedScrollView巢狀ListView出現問題以及解決方法

在使用CoordinatorLayout和AppBarLayout實現巢狀滑動的時候,出現listview沒有巢狀滑動; 如果要實現巢狀滑動,則需要新增NestedScrollView,但是結果發現listview只顯示一行資料 <android.support.v4.widget.N

iOS 12 更新 遇到的坑以及解決方法

1. 升級iOS12 編譯遇到 : iPhone has denied the launch request. 解決方法 修改以下證書的信任狀態:鑰匙串 -> 證書 -> 顯示簡介 -> 信任-> 將始終信任改為使用系統預設 Develo

講excel表插入oracle時出現的一些錯誤,以及解決方法

出現這個提示的時候是說明,在插入的employeename這一個欄位裡面有空值,切記,不是空格,是空值,而我們需要做的是看是否是遺漏了這個名字,或者是包含空值這一行不需要,這時刪除就行,具體情況,具體分析。 情況場景: 表A中有個欄位是外來鍵,關聯了表B中的某欄位,

Android Studio 3.0整合ButterKnife8.8.1版本出現問題以及解決方法

      新安裝了Android Studio 3.0 ,做專案的時候需要整合ButterKnife,去githd上一看ButterKnife升級到了8.8.1,按著用法整合到了專案中,but 出現了下面的錯誤:Error:(2, 0) Android Gradle plu

在使用jquery時attr("checked") 返回checked或undefined 原因以及解決方法

問題:在使用jquery時attr("checked") 返回checked或undefined ?演示程式碼如下:<!DOCTYPE html> <html> <head lang="en"> <meta charset="

argument type mismatch出現的原因,以及解決方法

原因: Struts的ActionServlet在接受到頁面的請求後,會呼叫RequestUtils.populate方法對Form進行填值,而此方法又呼叫到BeanUtils.populate方法,而該方法進行填值時對不同型別的會進行轉換,而預設的ActionSer

iOS 手機照片上傳伺服器方向不對的原因以及解決方法

蘋果手機上傳圖片到伺服器,發現圖片方向不對,實踐發現: 1:原因:  相機拍照後直接取出來的UIimage(用UIImagePickerControllerOriginalImage取出),它本身的imageOrientation屬性是3,即UIImageOrienta

mybatis 在name 模糊查詢時出現問題以及解決方法

今天出現一個詭異的事情在name進行模糊查詢過程中mybatis中寫sql內容為:   <![CDATA[ and `name` like CONCAT('%','${name}','%' )

vue安裝環境過程出現的問題,以及解決方法

安裝完一次npm,下載了小demo後,過一段時間再去用vue忘記環境已經安裝好,再次安裝時,由於npm安裝時下載不全,一直在報錯,試用了很多方法,cmd 指令安裝vue-cli一直報錯,最後我還是選擇在原來demo 下修改,之前報Error: Cannot find mod

MySQL 出現 java.sql.SQLException 之 Got error 28 from storage engine 問題分析以及解決方法

1 發現問題 一直好好的 MySQL 資料庫,今天突然報錯了,是使用者在查詢資料時發現的(web 應用)。趕緊看看應用日誌: Caused by: java.sql.SQLException: Got error 28 from storage engi

MySQL主從同步配置容易出現的問題以及解決方法

 1.問題一: 如果從庫的Slave_IO_Running為NO。 The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be di

vs2010+silverlight開發 出現的問題以及解決方法

      原因:360提示修補系統補丁。沒看,就習慣性的進行了系統修復       現象:vs2010除錯程式報錯”未安裝Silverlight Developer“       解決:按系統自動提示給出的連結(微軟)下載了Developer5       結果:恢復正常

開發遇到問題以及解決方法:mybatis配置時出現org.apache.ibatis.binding.BindingException: Invalid bound statement

如果出現: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 一般的原因是Mapper interface和xml檔案的定義對應不上,需要檢查包名,

使用ajax請求 返回Json出現亂碼解決方法

1:在使用ajax請求後臺訪問資料的資料,後臺返回的資料是亂碼,帶??問號的亂碼,之前還一直沒有遇到過,在這裡記錄整理一下,貼出解決程式碼! (1):前臺使用ajax ,已經設定返回的結果為json格式!ajax程式碼不貼出來了! (2):後臺程式碼 @RequestMap

iOS 動態庫和靜態庫的的區別 動態庫的隔離與靜態庫的吸附問題以及解決方法

起因 理論功底 動態庫和靜態庫 介紹 靜態庫和動態庫的區別 舉個例子, iOS 專案中使用 Embeded Framework 靜態庫和動態庫如何構建和載入 靜態庫和動態庫依賴關係