2012-02-01 2 views
3

私の目的は、ユーザーがキーボードの「完了」ボタンをクリックした後に、テキストをUITextFieldに保存することです。私はextFieldShouldReturnまたはtextFieldDidEndEditingでこれを行うことができます:それは何か違いはありますか?またはより良いアプローチがありますか?UITextFieldテストを保存する最良の方法:textFieldShouldReturnまたはtextFieldDidEndEditing

ありがとうございます!

答えて

17

textFieldShouldReturnは、ユーザーがリターンキーを押した場合にのみ呼び出されます。ユーザーが別のフィールドを選択したり、別の画面にビューを切り替えるなどの理由で、キーボードが閉じられても、それはされませんが、textFieldDidEndEditingはなります。

最善のアプローチは、このように(キーボードを非表示)レスポンダを辞任するtextFieldShouldReturnを使用することです:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    //hide the keyboard 
    [textField resignFirstResponder]; 

    //return NO or YES, it doesn't matter 
    return YES; 
} 

キーボードを閉じると、textFieldDidEndEditingが呼び出されます。あなたは、テキストで何かをするtextFieldDidEndEditingを使用することができます。

- (BOOL)textFieldDidEndEditing:(UITextField *)textField 
{ 
    //do something with the text 
} 

しかし、あなたが実際にユーザが明示的に押したときにのみアクションを実行したい場合は「行く」または「送信」または「検索」(または何でも)あなたが代わりにtextFieldShouldReturn方法でそのハンドラを置く必要があり、キーボード上のボタンは、その後、次のように:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    //hide the keyboard 
    [textField resignFirstResponder]; 

    //submit my form 
    [self submitFormActionOrWhatever]; 

    //return NO or YES, it doesn't matter 
    return YES; 
} 
+0

これは私がtextFieldDidEndEditingまたはそこより良いアプローチを使用する必要があることを意味するのでしょうか? – user836026

+0

更新された回答を参照してください。 –

+0

ありがとうございます。たとえユーザーが「ホーム」ボタンを押したとしても、ユーザーが「完了」ボタンを押さなくてもテキストを保存したいと思います。私はあなたの答えから "textFieldShouldReturn"を使うべきだと理解しました。 – user836026

関連する問題