UITextFieldをタップすると、ソフトウェアキーボードが画面下から現れます。しかしデフォルトではキーボードを消すことができません。Returnキーをタップした時にキーボードが消えるようにしてみましょう。
以下の4ステップで出来ます。
- ViewControllerをUITextFieldのデリゲートに設定する
- UITextFieldDelegateプロトコルに対応する
- UITextFieldからReturnキーが押されたというメッセージを受け取る
- キーボードを消す
1. ViewControllerをUITextFieldのデリゲートに設定する
Returnキーがタップされた時、UITextFieldオブジェクトはデリゲートへメッセージを送信します。
Xcodeを起動して、storyboardファイルを開いてください。次にcontrolキーを押しながら、UITextFieldをViewControllerの上にドラッグします。controlキーを押しながらドラッグしている間、画面に青い線が表示されます。
ポップアップメニューの "delegate" をクリックします。
これで設定できました。デリゲートの設定状態はUtilitiesパネルで確認できます。
2. UITextFieldDelegateプロトコルに対応する
UITextFieldとそのデリゲートはUITextFieldDelegateプロトコルに従って通信します。ViewControllerをUITextFieldDelegateプロトコルに対応させてみましょう。以下のコードを追加してください。
#import <UIKit/UIKit.h> @interface TaskViewController : UIViewController <UITextFieldDelegate> @endここではUIViewControllerがUITextFieldDelegateプロトコルに対応していることを宣言しています。
3. UITextFieldからReturnキーが押されたというメッセージを受け取る
Returnキーが押された時、UITextFieldは "textfieldShouldReturn:" メッセージをデリゲートへ送ります。実際にメッセージが送られているかどうかを確認してみましょう。以下のコードをViewControllerへ追加してください。
◯◯ViewController.h
◯◯ViewController.m
◯◯ViewController.h
#import <UIKit/UIKit.h> @interface TaskViewController : UIViewController <UITextFieldDelegate>// ADD HERE - (BOOL)textFieldShouldReturn:(UITextField *)textField; @end
◯◯ViewController.m
#import "TaskViewController.h"
@interface TaskViewController ()
@end
@implementation TaskViewController
// ADD HERE
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
NSLog(@"tapped return key!");
return YES;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
@end
最後にキーボードを消しましょう。textFieldShouldReturn:メソッドを以下のように編集してください。
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
[textField resignFirstResponder];
return YES;
}
resignFirstResponder:メッセージをキーボードオブジェクトへ送れば、キーボードが消えます。





0 件のコメント:
コメントを投稿