0

私のviewcontrollerの1つで、Aとしましょう。次のものがあります。

 OnbViewController *on = [[OnbViewController alloc] initWithNibName:nibName bundle:nil];
        onboardingTutorial.delegate_ = self;
self.test = on
 UINavigationController *nController = [[UINavigationController alloc] initWithRootViewController:self.test]
[self presentModalViewController:nController]
[nController release];

次に、OnbViewController 内で、navigationController にプッシュしました。

[self.navigationController pushViewController:someViewController];

次に、didSelectRowForIndexPath: でデリゲート (A) を呼び出し、呼び出したデリゲート関数内で、次のようにして再度プッシュしようとしました。

[self.test pushViewController:someOtherViewController];

そして、これは私にそのエラーを与えます:

nested push animation can result in corrupted navigation bar
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
   Unbalanced calls to begin/end appearance transitions for <someOtherViewController: 0x6f942e0>.

何か案が?

4

2 に答える 2

2

かなり複雑な呼び出しシーケンスですが、最初に目にする問題は、navigationController ではなく、OnbViewController で pushViewController を呼び出しているように見えることです。多分に変更するの[self.test.navigationController pushViewController:someOtherViewController];に十分でしょうか?

編集:これをさらに見てみると、「ネストされたプッシュアニメーション」の「アニメーション」に注意してください。onbViewController は、viewWillAppear またはそのような早い段階で someViewController にプッシュしていますか? たぶん、2番目のアニメーションをスキップするとうまくいくでしょうか?

于 2012-04-11T23:30:45.997 に答える
0

そこで作成されるのは、ポインターの本当のもつれです。self.test は、ナビゲーション コントローラー (nController) のルート VC です。nController をモーダルに提示してから、他のビュー コントローラーをその vc スタックにプッシュします。

次に、そのスタックがまだそこにある間に、self.test にプッシュします。これは、ルートに再度プッシュするようなものです。

didSelectRow メッセージを取得している VC にプッシュを実行させます。それが起こったことをデリゲートに伝えることができます。

于 2012-04-11T23:32:15.340 に答える