スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]UINavigationControllerの進んだ時、戻った時のイベント

UINavigationControllerに表示されるBackボタンの処理をどうにかハンドリングできないか悩んでいた時、
actionにselectorを指定していたのだが、これがだめだった。
[Bugle Diary][Objective-C][iPhone sdk]やっぱり、backBarButtonItem の動作は

やってはいけないことだとわかった後、
ふと、デリゲートでやれと言ってるんだから用意されているのでは?と思い直し、再度デリゲートを調べなおした。

そしたらあった。
[iPhoneアプリ開発と留学]ナビゲーションバーのボタンが押されたときに呼ばれるdelegateを設定する

UINavigationControllerを継承したクラスでデリゲートを行い、
そのクラスをUINavigationControllerのインスタンス代わりに生成。

無事、デリゲートの処理が行われている。
後はこいつに、処理を書くか、さらにデリゲートして外部で処理させれば万事解決だろう。

とおもったが、

そんなことはなかった。
このデリゲートを追加すると、ビューを戻るときのボタンの機能が無くなってしまう。
具体的にはビューが戻らず、ナビゲーションの表示だけが戻っていく。
(つまり、ボタンを押した時に発生するpopViewControllerのイベント部分に入らないということ)

じゃあpopViewControllerをこのデリゲート内でやればいいかというと、
popViewControllerはこのデリゲートを利用しているためか、2度デリゲートが実行される現象が起きる。

そんなわけでこのデリゲートはお釈迦にしてデフォルトの状態に戻したのです。

そんな途方に暮れていたところに
[CaptainShadowの日記]NavigationControllerが管理するViewControllerのviewWillAppear:animatedおよびviewDidAppear:animatedがコールされない場合の対処方法

これを見て、当初一番最初に諦めたUINavigationControllerでのページ遷移時のイベントハンドリングができることに気付きました。

これを実装してみたところ案外うまく動いた。

けどこれ、戻ったのか進んだのかが分からない。
進んだ時も、戻った時もこれが呼ばれる。

そこで
UINavigationControllerが管理するプロパティ"viewControllers"を利用した。

こいつの数を管理することで決着をつけた。

こいつをカウントしたものを常に保管し、
減ったら戻った、増えたら進んだ という分岐を入れることで見分けることにした。

何とか動いて今回の件は終了となりました。
このエントリーをはてなブックマークに追加
Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。