iPhoneで文字を入力してもらうときにはUITextFieldかUITextViewを使います。
UITextFieldとUITextViewはUITextInputTraitsプロトコルを継承していて、プロパティをちょっと変えるだけでいろいろと細かい設定ができます。
iPhoneの画面は狭いので、文字入力をするときにこのあたりのことを注意するようにすると、ユーザーの使い勝手がちょっとよくなりますよ。
まずはUITextFieldを作ってみる
まずはテキストフィールドの作成。
普通につくると、こんな感じのキーボードが表示されて文字が入力できます。
(図はクリックすると拡大します。)
inputText.borderStyle = UITextBorderStyleRoundedRect;
キーボードのReturnキーを変える
まずは、キーボードの右下にあるReturnキーをちょっと変えてみましょう。
キーボードのキーを変更するには、UITextFieldのreturnKeyTypeプロパティを変更。
こちらのenumから選んでください。
UIReturnKeyDefault,
UIReturnKeyGo,
UIReturnKeyGoogle,
UIReturnKeyJoin,
UIReturnKeyNext,
UIReturnKeyRoute,
UIReturnKeySearch,
UIReturnKeySend,
UIReturnKeyYahoo,
UIReturnKeyDone,
UIReturnKeyEmergencyCall,
} UIReturnKeyType;
それぞれのenumを指定した時に表示されるキーボードはこうなります。
(画面は英語の場合です。iPhoneの言語が日本語の場合、多少表示が違います。)
キーボードの種類を変える
次はキーボードの種類を変えてみます。
UITextFieldのkeyboardTypeを変えると
特に、入力するデータがメールアドレスやURLなどの特定の文字を使う時にはとても便利です。
こちらの選択肢から。
UIKeyboardTypeDefault, // Default type for the current input method.
UIKeyboardTypeASCIICapable, // Displays a keyboard which can enter ASCII characters, non-ASCII keyboards remain active
UIKeyboardTypeNumbersAndPunctuation, // Numbers and assorted punctuation.
UIKeyboardTypeURL, // A type optimized for URL entry (shows . / .com prominently).
UIKeyboardTypeNumberPad, // A number pad (0-9). Suitable for PIN entry.
UIKeyboardTypePhonePad, // A phone pad (1-9, *, 0, #, with letters under the numbers).
UIKeyboardTypeNamePhonePad, // A type optimized for entering a person's name or phone number.
UIKeyboardTypeEmailAddress, // A type optimized for multiple email address entry (shows space @ . prominently).
UIKeyboardTypeDecimalPad, // A number pad with a decimal point.
} UIKeyboardType;
それぞれのenumで表示されるキーボードはこうなります。
(画面は英語の場合です。iPhoneの言語が日本語の場合、多少表示が違います。)
UIKeyboardTypeASCIICapableの場合。
UIKeyboardTypeNumbersAndPunctuationの場合。
UIKeyboardTypeNamePhonePadの場合。
UIKeyboardTypeEmailAddressの場合。
UIKeyboardTypeDecimalPadの場合。(ただし、このキーボードはiOS 4.1 以上のみ。)
UITextFieldでキーボードを簡単に閉じる
さて、上でreturnKeyTypeを設定してReturnキーの表示を「Done」に変えても、そのままでは「Done」ボタンを押したときにキーボードが閉じてくれるわけではありません。
キーボードのReturnキーを押されたときの挙動を定義する必要があります。
まずはUITextFieldのdelegateをselfに設定。
inputText.delegate = self;
そして、selfにtextFieldShouldReturnを実装して、そのなかでresignFirstResponderを呼ぶと、Returnキーを押されたときにキーボードが閉じるようになります。
[textField resignFirstResponder];
return YES;
}
もちろんキーボードを閉じる以外の処理をすることも可能です。
キーボードに閉じるボタンをつける
UITextFieldでキーボードを閉じたいときには上の方法が使えますが、複数行のテキストを使うときにはこの方法は使えません。
複数行のテキストの編集にはUITextViewを使いますが、Returnキーでキーボードを閉じるようにしてしまうと、改行ができなくなってしまいます。
UITextViewの場合には、accessoryViewを設定して、キーボードの上にこんな閉じるボタンをつけましょう。(あ、この画面ではUITextViewでなくてUITextFieldを使ってますが……。)
accessoryView.backgroundColor = [UIColor whiteColor];
// ボタンを作成する。
UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
closeButton.frame = CGRectMake(210,10,100,30);
[closeButton setTitle:@"閉じる" forState:UIControlStateNormal];
// ボタンを押したときによばれる動作を設定する。
[closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside];
// ボタンをViewに貼る
[accessoryView addSubview:closeButton];
inputText.inputAccessoryView = accessoryView;
closeKeyboardメソッドはこちらで定義。
[inputText resignFirstResponder];
}
accessaryViewの上にはCloseボタンだけではなくて、「Prev/Next」ボタンやなど、ユーザーの入力の補助になるようなボタンをいろいろおくことができます。
Viewの色を[UIColor clearColor]にしておけば、ボタンだけを表示することもできるので、いろいろ凝ったデザインのものをつくってみても素敵だと思います。
個人的にはNoticaというアプリのこのaccessaryViewがさりげなくてお気に入りです。














このアプリケーションはあなたの日常生活の様々な時間を簡単に記録することができる、ライフログアプリケーションです。
このアプリケーションはあなたの日常生活の様々な時間を簡単に記録することができる、ライフログアプリケーションです。(無料版)