1
- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) {
            NSArray *tempArr = self.navigationController.viewControllers;
            self.navigationController.viewControllers = tempArr;
            [self.navigationController popViewControllerAnimated:YES];
            return;
        }
    }
    [super viewWillDisappear:animated];
}

ユーザーが戻るボタンを押し、前の UIViewController が CustomViewController の場合、最後の 2 つの UIViewControllers をポップし、それ以外の場合は最後の UIVIewController を 1 つポップします。

これらの文字列は何の意味もないと思います:

        NSArray *tempArr = self.navigationController.viewControllers;
        self.navigationController.viewControllers = tempArr;

しかし、それらを削除すると、最後の 2 つの UIViewController をポップし、現在の UIViewController のタイトルではなく、CustomViewController のタイトルを取得します。

バグですか?そして、このコードは iOS 6 で動作しますか?

4

2 に答える 2

2

popViewController が配列をポップする前または後にチェックしているかどうかがわからないため、これが実際に機能するかどうかはわかりません。アイデアは、viewController を 2 回ポップする代わりに、最後のオブジェクトを削除することです。

- (void)viewWillDisappear:(BOOL)animated
{
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        if ([self.navigationController.viewControllers.lastObject isKindOfClass:[CustomViewController class]]) {
            NSMutableArray *tempArr = [self.navigationController.viewControllers mutableCopy];
            [tempArr removeLastObject];
            self.navigationController.viewControllers = tempArr;
            return;
        }
    }
    [super viewWillDisappear:animated];
于 2012-10-03T10:01:18.160 に答える
1

アンワインド セグエを使用すると、これを行うためのはるかに優れた方法があります。

基本的に、ViewController にマーカー ポイントを設定し、その上に View Controller をプッシュします。

次に、いつでも(ユーザーがボタンなどを押したとき)、マーカーが付いたviewControllerに戻ることができます。

ポップするView Controllerの数などを計算する必要がなくなりました...それだけで機能します。

このStackOverflow の回答を参照してください。

于 2012-10-03T09:59:58.067 に答える