Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

[Swift] UINavigationControllerで戻るイベントを取得する

公開日: : 最終更新日:2015/08/12 iPhone App 開発, Swift


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

UINavigationController

UINavigationControllerを使用して画面を構成したときに、ナビゲーションバーに戻るボタンが自動的に挿入されます。
iOS_Simulator_Screen_Shot_2014_11_28_15_07_16
遷移後の画面から前画面に戻るときに、なんらかの処理をしたい場合は以下の方法で取得できます。

DetailViewController.swift

MasterViewController.swiftが元画面、DetailViewController.swiftが遷移後の画面だとします。
遷移後のDetailViewController.swiftに以下のコードを追加します。

override func viewWillDisappear(animated: Bool) {
    let viewControllers = self.navigationController?.viewControllers!
    if indexOfArray(viewControllers!, searchObject: self) == nil {
        // 戻るボタンが押された処理
        println("back!")
    }
    super.viewWillDisappear(animated)
}

func indexOfArray(array:[AnyObject], searchObject: AnyObject)-> Int? {
   for (index, value) in enumerate(array) {
       if value as! UIViewController == searchObject as! UIViewController {
           return index
       }
   }
   return nil
}

viewWillDisappearは表示している画面が別画面に遷移する直前に呼ばれます。

2行目でUINavigationControllerに内包されているUIViewControllerの一覧を取得。
このviewControllersには遷移する毎にUIViewControllerが追加されていきます。

viewWillDisappearが呼ばれた時点で自コントローラーは一覧からなくなっている状態なので(オブジェクトはまだ存在する)、3行目で存在チェック。
viewControllersは[AnyObject]!なのでオブジェクト同士を比較するための処理が必要です。

10行目で新規にindexOfArrayという関数を用意しました。内容は、UIViewController同士を比較して同じViewControllerであればそのIndexを返し、存在しない場合はnilが返却されます。

Objective-Cの場合

Objective-Cの場合もSwiftと同様にviewWillDisappearに記述します。

-(void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound)
    {
        // 戻るボタンが押された処理
        NSLog(@"back!");
    }
    [super viewWillDisappear:animated];
}

ad

関連記事

[iPhone App] WorkManagerの不具合について

バージョン1.2.2の不具合 11/25日現在、iPhoneアプリの「WorkManger」バージ

記事を読む

[Swift] 関数型プログラミング

関数型プログラミングについて、ストーリー仕立ての面白い記事がありましたので紹介します。 IQ1

記事を読む

no image

一旦、離脱中!

サイト制作の仕事がちょろちょろちょろっと入ってきたので、寂しいけれどしばしXcodeとはお別れ。

記事を読む

[Swift] CoreDataで検索したデータを削除する

CoreDataの検索と削除 前の投稿  CoreDataを使ってみる をふまえて今度は検索&削除

記事を読む

[Swift] UITabBarControllerでタブ選択時のイベントを取得する

UITabBarController タブを使った画面を作成する場合はUITabBarContro

記事を読む

[Swift] プロパティリスト(plist)を使ってCoreDataで一括登録する

プロパティリストを使う 初期データやあらかじめ用意したデータを一括登録したい場合、プロパティリスト

記事を読む

no image

爆走中!

挫折街道爆走中です! が! 迷走中でもあるわけです、はい。 そんな中で、迷走するに至った訳

記事を読む

Xcode5のstoryboard内でUIKeyCommandエラーの対処法

既存のプロジェクトからstoryboardにあるオブジェクトをコピペして、新規プロジェクトに貼付けた

記事を読む

App開発をはじめてみました。

はじめてみたはいいものの、右も左もわからず、書籍を読みあさり、ネットを徘徊し、いろんなことを調べ上げ

記事を読む

[Swift] Asset Catalogについて

XCode5から追加されたAsset Catalog。 いままで標準のImages.xcasset

記事を読む

ad

Comment


  1. Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
    na より:

    Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

    はじめまして。有用な情報ありがとうございます。
    こちらの件、試してみたのですが、横スワイプで戻ろうとして途中で止めた場合にも反応してしまうようです。
    これを解消することは出来るものでしょうか?


    • Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
      north より:

      Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

      コメントありがとうございます。お返事遅くなり申し訳ございません。

      スワイプで戻る場合でのキャンセルの事象がこちらでも確認できました。
      対処法ですが、viewWillDisappearでviewControllerのnil判定をしています。
      ここで、フラグか何か設定しておいてviewDidDisappearで判断するのはどうでしょう。

      ご確認宜しくお願い致します。

na へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ad

[PHP] curl転送してみる(googleに)

curlでgoogle画像検索APIにアクセスしてみます。 cu

[PHP] PDOでMySQLの接続確認をする

PDO PHPでMySQLに接続する際には、mysql_connec

[PHP] ランダムな英数字を生成する

便利系メソッド 今回はPHPでランダムな英数字を作成してみます。

[Swift] プロパティリスト(plist)の値を取得

plistからデータを取得してみます。 こちらのエントリーも参考にし

[Swift] Asset Catalogについて

XCode5から追加されたAsset Catalog。 いままで標準

→もっと見る

  • 1978年の七夕生まれ。 25才でweb業界の門を叩き、28才でフリーランスに。 現在は、フリーランスでマークアップ中心に、wordpressのカスタマイズやデザインをしております。 また、iPhoneアプリの開発もしております。

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
PAGE TOP ↑

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/juny/web/hidef/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524