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 件のコメント:
コメントを投稿