コンテンツへスキップ

キーボードを閉じるためのボタンを追加する

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の場合と同じ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です