1

(当面はiOS 2.0をターゲットにしています。)

UITextFieldをサブクラス化し、UITextFieldDelegateプロトコルを実装するクラスがあります。

最初は、クラスを独自のデリゲートとして設定していませんでした。フィールドをクリックすると、キーボードが自動的にポップアップしました。ここまでは順調ですね。

setReturnKeyType:メッセージをUIReturnKeyDoneで送信すると、右下のボタンが[完了]に変わります。

問題は、[完了]をクリックするか[戻る]を押しても何も起こらなかったことです。キーボードが消えませんでした。

編集終了通知のオブザーバーとして自分自身を追加しようとしましたが、[完了]をクリックしても呼び出されませんでした。グーグル検索から、フィールドがファーストレスポンダーとして辞任したときにのみ解雇されるようです-これは私が起こることができないビットです。

次に、ここで、デリゲートとして自分自身を追加し、textFieldShouldReturn:を処理することを提案する回答を見つけました。問題は、デリゲートとして自分自身を追加するとすぐに、フィールドをクリックしたときにキーボードがポップアップしなくなることです(そしてフォーカスが得られません)-それはファーストレスポンダーになっていないようです。

textFieldShouldBeginEditing:を処理してYESを返し(ドキュメントでは、オーバーライドしない場合はデフォルトにする必要があると記載されています)、呼び出されましたが、違いはありませんでした。私は知らないうちに[textFieldbecomeFirstResponder]を試し、スタックオーバーフローが発生しました(これは、ファーストレスポンダーになろうとしたことに応じて呼び出されることがわかりました

私は今完全に立ち往生しています!

誰か助けてもらえますか?ユーザーが[完了]をクリックするか[戻る]を押したときにキーボードが消えてほしいだけです。

4

2 に答える 2

2

xibを使用していますか、それともプログラムで実行していますか?xibを使用している場合は、ファイルの所有者でデリゲートを接続するのを忘れている可能性があります。

(BOOL)textFieldShouldReturn:(UITextField *)textField   
{
    [textField resignFirstResponder];
    return YES;
}

これを試してください。

于 2012-06-14T09:26:54.203 に答える
0

私のせい。テキストフィールドのデリゲートをそれ自体に設定することは想定されていないことがわかりました。未処理のセレクターがデリゲートに転送されるため、問題が発生します。セレクターに応答しない場合、メッセージはそのデリゲートに送信されます...それ自体は、すでに応答していないことがわかっています。したがって、無限ループ。

デリゲートとして別のオブジェクトを使用すると、完全に機能しました。

うまくいけば、これは他の誰かが同じ問題を回避するのに役立つでしょう。

于 2012-06-15T05:05:40.933 に答える