1

だから私は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 神々を正しくなだめる方法で、私がやりたいことを行うにはどうすればよいでしょうか?

4

2 に答える 2

2

textViewShouldBeginEditing が 2 回呼び出されているかどうかを確認します。この種のデリゲート呼び出しが時々あることに気付きました。

于 2012-12-12T16:55:28.877 に答える
0

@"editMemoSegue" は絵コンテでどのように作成されていますか? それはtextViewから作成されていますか?その場合は、ビュー コントローラーから直接再作成するか、ビュー コントローラーの一番上のステータス バーから再作成して、トリガー オブジェクトに触れたときとプログラムで呼び出したときに 2 回呼び出されないようにする必要があります。

于 2012-12-09T18:56:03.997 に答える