これはおそらく馬鹿げた質問ですが、ドキュメントで答えが見つかりません。ポップアップキーボードの[完了]ボタンは常にキーボードを非表示にしましたか?私はこのようなウェブの周りにたくさんのコードを見ます:
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
[theTextField resignFirstResponder];
return YES;
}
「完了」ボタンを押すと、キーボードがポップダウンし、UITextField
がファーストレスポンダーを辞任します。
「完了」ボタンを押してもUITextField
からresignFirstResponder
が発生することはなかったと思われますが、その動作はいつか変更されました。
OS 3.0-3.1.3でデバッグしています
UITextFieldとこのコードだけで小さなテストプロジェクトを作成しました
#import <UIKit/UIKit.h>
@interface TextFieldTestViewController : UIViewController
<UITextFieldDelegate>
{
UITextField *textField;
}
@property (nonatomic, retain) IBOutlet UITextField *textField;
@end
#import "TextFieldTestViewController.h"
@implementation TextFieldTestViewController
@synthesize textField;
- (void)viewDidLoad
{
[self.textField setDelegate:self];
[self.textField setReturnKeyType:UIReturnKeyDone];
[self.textField addTarget:self
action:@selector(textFieldFinished:)
forControlEvents:UIControlEventEditingDidEndOnExit];
[super viewDidLoad];
}
- (IBAction)textFieldFinished:(id)sender
{
// [sender resignFirstResponder];
}
- (void)dealloc {
[super dealloc];
}
@end
テキストフィールドは、変更されていないUITextField
で、アウトレットが接続された状態でNIBにドラッグされます。
アプリを読み込んだ後、テキストフィールドをクリックするとキーボードが表示されます。 「完了」ボタンを押すと、テキストフィールドのフォーカスが失われ、キーボードがアニメーション化されます。ウェブに関するアドバイスは、常に[sender resignFirstResponder]
しかし、これはそれなしで動作します。
Xcode 5.1で
完了ボタンを有効にする
[完了]が押されたときにキーボードを非表示にする
このメソッドをViewControllerに追加します
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
ドキュメント(任意のバージョン)から:
選択した時点でキーボードを閉じるのはアプリケーションの責任です。ユーザーがユーザーインターフェイスの特定のボタンをタップするなど、特定のユーザーアクションに応答してキーボードを閉じることができます。また、ユーザーがキーボード自体の「return」キーを押したときにキーボードを閉じるようにテキストフィールドデリゲートを構成することもできます。キーボードを閉じるには、現在最初の応答者であるテキストフィールドにresignFirstResponderメッセージを送信します。これを行うと、テキストフィールドオブジェクトは現在の編集セッションを終了し(デリゲートオブジェクトの同意を得て)、キーボードを非表示にします。
そのため、何らかの方法でresignFirstResponderを送信する必要があります。ただし、textFieldShouldReturn:メッセージの処理中に、テキストフィールドが別の方法でフォーカスを失う可能性があります。これにより、キーボードが消えます。
[完了]ボタンの1行のコード:-
[yourTextField setReturnKeyType:UIReturnKeyDone];
TextFieldのvalueChangedにアクションメソッドを追加し、この行を追加します-
[yourTextField resignFirstResponder];
この方法を使用して、テキストフィールドの選択を変更しました
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if ([textField isEqual:self.emailRegisterTextField]) {
[self.usernameRegisterTextField becomeFirstResponder];
} else if ([textField isEqual:self.usernameRegisterTextField]) {
[self.passwordRegisterTextField becomeFirstResponder];
} else {
[textField resignFirstResponder];
// To click button for registration when you clicking button "Done" on the keyboard
[self createMyAccount:self.registrationButton];
}
return YES;
}