これは、「しばらく前に機能していた」トラブルシューティング作業の1つです。
私はドキュメントプレビュービューコントローラーに取り組んでいます。スクロールビューには、各ドキュメントを表すUIViewのサブクラスが含まれています。スクロールビューを水平方向にページングして作成することを除いて、Keynoteがドキュメントプレビューを処理する方法に非常に近い形でこれをモデル化しています。ただし、標準のユーザーエクスペリエンスが存在します。ドキュメントアイコンを長押しすると、すべてのドキュメントアイコンが揺れ始め、ナブバーには+ボタンと編集ボタンがあります。
目前の問題は、ドキュメントの名前をタップすると、他のすべてのドキュメントを非表示にし、編集中のドキュメントを前面と中央に移動し、新しいテキスト編集フィールドを作成して、本名ラベルの上にサブビューとして追加することです。ファーストレスポンダーとして設定します。しかし
[editNameTextField setClearButtonMode:UITextFieldViewModeWhileEditing];
編集フィールドに正しく表示されている間は、ユーザーがクリアボタンをタップしても何のアクションも実行されません。
これが機能しないようにするために私が何をしたのか理解できません-それはそうでした!
私の最初の考えは、どういうわけか、このサブクラスの私のインスタンスは、このテキスト編集フィールドのデリゲートではなくなったということでした。それを確認/拒否するために、ドキュメントプレビューの画像ビューをタップして、デリゲートプロパティを自分自身と比較すると、合格します。
if (editNameTextField) {
NSLog(@"editNameTextField is still active");
if ([editNameTextField.delegate isEqual:self]) {
NSLog(@"we're still the delegate for the editNameTextField");
}
}
編集フィールド内のテキストの編集は正常に機能します。Return / Doneキーを正しく押すと、デリゲートメッセージが送信されますtextFieldShouldReturn:
これを調査している間、メソッドが呼び出された場合にログメッセージを書き込むためだけにデリゲートメソッドを実装しましたtextFieldShouldClear:
(もちろんYESを返します)。呼び出されることはありません。
私の次の考えは、おそらくサブビューがクリアボタンが置かれている領域を覆っていたということでした。そこでtextFieldShouldBeginEditing:
、この機会を利用して、テキストフィールドを前面に表示しました。それも何も変わりませんでした。呼び出されたときにサウンドを再生するためにそこにデバッガブレークポイントを設定し、呼び出されたので、テキスト編集フィールドが最前面にあることがわかります。
残りのトラブルシューティング戦略は1つだけです。スナップショットが再び機能し始めるまで、スナップショットをさかのぼって確認します。それをする前に、私はここにいる経験豊富な人々の誰かが次に何を試すべきかについて何か提案があるかどうか見るだろうと思いました。