2

iOS アプリケーションの開発にモノタッチを使用しています。s1、s2、s3 の 3 つの画面があるとします。ユーザーは次のように開くことができます: s1 -> s2 -> s3 。

ユーザーがs2を開いた場合、ナビゲーションの戻るボタンでs1画面に戻ることができますが、ナビゲーションバーの戻るボタンを押してs3画面に移動すると、アプリケーションはs1ではなくs2に戻ります。

iosで可能ですか?AndroidでNoHistory属性を使用する場合、この機能を実装できますが、iosにも同等のものはありますか?

4

2 に答える 2

3

navigationController の View Controller を手動で編集して、s2 を削除できます。

を使用self.navigationController.viewControllersして、現在のスタックを取得し、[self.navigationController setViewControllers:animated:]スタックを設定できます。

あなたの場合、あなたはしたいかもしれません:

NSMutableArray *views = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
[views removeObjectAtIndex:1];
[self.navigationController setViewControllers:views animated:NO];

これを s3 viewController で呼び出すと、スタック上の viewController が取得され、2 つ目 (インデックス 1 のオブジェクト) が削除され、それらが新しいスタックとして設定されます。animation:NO は、アニメーションなしで即座に実行できるようにするだけです。

このコード行を変更して、その前に s2 がない状態で s3 に到達した場合に s3 がポップされないように注意してください。また、s2 とルートの間に別のビューがある場合、削除したいビューは ではない可能性がありますobjectAtIndex:1

于 2013-08-04T22:18:45.483 に答える
0

Uはこれを試すことができます

戻るボタンを押したとき:

for (UIViewController * viewController in self.navigationController.viewControllers)
{
    if ([viewController isKindOfClass: NSClassFromString(@"<ClassName for S3>")])
    {
         [self.navigationController popToViewController: [self.navigationController.viewControllers objectAtIndex: 0] animated: NO];
          break;
    }
}

またはあなたも使用できます

   [self.navigationController popToRootViewControllerAnimated: NO];
于 2013-08-05T05:23:05.727 に答える