だから私はiPhoneアプリを持っています。これは単純な構造で、すべてUINavigationController
.
あるビュー、別のビューへのセグエなどを含むストーリーボードがあります。この別のビューには、UITextView
この画面で編集したくないものがあります。ユーザーがこれをタップすると、代わりに 2 番目に飛びます。基本的に同じテキストビューを持つ画面ですが、これは全画面表示であり、ユーザーはその画面でテキストを編集してから前の画面に戻ります。
だから私は方法をキャプチャしtextViewShouldBeginEditing
ます。以前、ストーリーボード エディターで、前のビュー コントローラーからこの新しいビュー コントローラーへのプッシュ セグエを手動で作成し、その ID で呼び出すことができるように名前を付けました。
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
// This is called when the user clicks into the textView as if to edit it.
// Instead of editing it, go to this other view here:
[self performSegueWithIdentifier:@"editMemoSegue" sender:self];
// Return NO, as I don't actually want to edit the text on this screen:
return NO;
}
合理的なようです。そして、それは機能します。ちょっと。実際、それは私をその別の見方に駆り立てます。その他のビューのイベントが発生し、そのテキスト ビューをファーストレスポンダーに設定し、その画面でテキストを編集します。みんな幸せです。
戻るボタンを使用して前のビューに戻るまで。
それからすぐにわかります - 私のナビゲーション スタックはだまされています。ほとんどの場合、何らかの理由でスタックに新しい編集コントローラーのインスタンスが 2 つあるため、最初に [戻る] ボタンを押すと、同じことが繰り返されます。その後、奇妙なことに、時折意図したとおりに動作し、1 回戻るだけで以前のコントローラーが表示されます。
ログを読み始めたところ、次のことがわかりました。
2012-12-09 09:41:03.463 APP[8368:c07] nested push animation can result in corrupted navigation bar
2012-12-09 09:41:03.818 APP[8368:c07] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
2012-12-09 09:41:03.819 APP[8368:c07] Unbalanced calls to begin/end appearance transitions for <SecondController: 0x83881d0>.
明らかに、私はここで何か間違ったことをしています。問題は、何ですか?そして、iPhone フレームワークの tiki 神々を正しくなだめる方法で、私がやりたいことを行うにはどうすればよいでしょうか?