2013年6月25日火曜日

UINavigationControllerで前のビューに戻る方法

UINavigationControllerで前のビューに戻る方法をメモで書きます。

遷移の方法

ビューの遷移は以下のコードで行ったものとして説明します。
HogeViewController *vc = [[HogeViewController alloc] init];
[self.navigationController pushViewController:vc animated:YES];

ビューを戻してみる

では、ビューを戻してみます。

1つ前に戻る

一つ前に戻るのであれば以下のコードを使用します。
[self.navigationController popViewControllerAnimated:YES];
pushされたものをpopしている感じですね。

2つ以上前に戻る

2つ以上前に戻るのであれば、まず、UINavigationControllerで遷移してきた過去のビューは

self.navigationController.viewControllers

に保存されています。

ですので、"viewControllers"から戻りたいビューの番号を取り出してビューを前の場所に戻します。

試しに2つ前のビューを取り出してみます。

例:2つ前のビューに戻る

現在のビューから2つ前のビューに戻る際のコードは以下。
NSInteger count = self.navigationController.viewControllers.count - 3;
HogeViewController *vc = [self.navigationController.viewControllers objectAtIndex:count];
[self.navigationController popToViewController:vc animated:YES];
NSInteger型変数countに戻りたいビューの番号が入るのですが、ここで、起点となる現在の画面は "-1" になります。

よって、2つ前に戻るのであれば、上のコードのように、ここの値は "-3" になります。

他の方法

他の方法でも戻ることができます。

やり方は以下のコードになります。
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
上の「2つ以上前に戻る」を簡潔的に書いた形でしょうか。
念のため説明を。

遷移してきたビューの階層は配列で管理されてます。上のコードは一番最初に戻るものなんですが、0番目とってきて(objectAtIndex:0)遷移させています。

こちらの方がコードも短くて分かりやすいかもしれませんね。

参考記事

iPhoneアプリ開発 −複数前の画面に戻る− - PPl@ce
UINavigationControllerをつかって、今のビューより2つ後ろに戻るには?- ssdkfk

0 件のコメント:

コメントを投稿