2013年2月4日月曜日

Returnキーを押した時にキーボードを消す方法


 UITextFieldをタップすると、ソフトウェアキーボードが画面下から現れます。しかしデフォルトではキーボードを消すことができません。Returnキーをタップした時にキーボードが消えるようにしてみましょう。

 

 以下の4ステップで出来ます。
  1. ViewControllerをUITextFieldのデリゲートに設定する
  2. UITextFieldDelegateプロトコルに対応する
  3. UITextFieldからReturnキーが押されたというメッセージを受け取る
  4. キーボードを消す

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
#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
 コードを実行して、Returnキーをタップしてみてください。デバッグエリアにログが表示されるはずです。



4. キーボードを消す

 最後にキーボードを消しましょう。textFieldShouldReturn:メソッドを以下のように編集してください。
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
 [textField resignFirstResponder];
 return YES;
}
 resignFirstResponder:メッセージをキーボードオブジェクトへ送れば、キーボードが消えます。

参考資料 - iOS Developer Library

0 件のコメント:

コメントを投稿