UITextField、UITextViewの操作時にキーボードを表示させたはいいものの、そのキーボードを閉じられないケースがある。
特にキーボードを数字にした場合は、ASCIIキーボードのように「Doneで閉じる」方法が使えない。
そこで、キーボードの上にボタンを追加し、このボタンで閉じるようにする。
UITextField、UITextFieldのinputAccessoryViewプロパティにViewを設定し、そのView上にボタンを置くようにする。
手法1:UIViewを使う方法
// ボタンを配置するUIViewを作成 UIView* accessoryView =[[[UIView alloc] initWithFrame:CGRectMake(0,0,320,44)] autorelease]; accessoryView.backgroundColor = [UIColor blackColor]; // ボタンを作成 UIButton* closeButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; closeButton.frame = CGRectMake(210,5,100,30); [closeButton setTitle:@" Close" forState:UIControlStateNormal]; // ボタンを押したときに呼ばれる動作を設定 [closeButton addTarget:self action:@selector(closeKeyboard:) forControlEvents:UIControlEventTouchUpInside]; // ボタンをViewに追加 [accessoryView addSubview:closeButton]; // ビューをUITextFieldのinputAccessoryViewに設定 textField.inputAccessoryView = accessoryView;
Closeボタン実行時の処理も記述する。
当該UITextFieldのresignFirstResponderを呼出すと、結果的にキーボードが閉じられる。
-(void)closeKeyboard:(id)sender{ [textField resignFirstResponder]; }
手法2:UIToolbarを使う方法
UIViewがUIToolbarに替わっただけ。
// ツールバーの作成 UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; toolBar.barStyle = UIBarStyleBlackOpaque; // スタイルを設定 [toolBar sizeToFit]; // フレキシブルスペースの作成(Doneボタンを右端に配置したいため) UIBarButtonItem *spacer = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil] autorelease]; // Doneボタンの作成 UIBarButtonItem *done = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard:)] autorelease]; // ボタンをToolbarに設定 NSArray *items = [NSArray arrayWithObjects:spacer, done, nil]; [toolBar setItems:items animated:YES]; // ToolbarをUITextFieldのinputAccessoryViewに設定 textField.inputAccessoryView = toolBar; [toolBar release];
Closeボタン実行時の処理は、手法1の場合と同じ。