スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]キーボード外を押すとキーボードが隠れる仕組み

キーボード以外の領域に対して透明なボタンを設置し、そのボタンが押されたら閉じるようにする。

まずはキーボードサイズを取得せねばならない。
[TECHLOG]
キーボードのサイズ取得

上記URLは2.x系での取得方法。

設定するイベントは4種類あります。
■ UIKeyboardWillShowNotification
■ UIKeyboardDidShowNotification
■ UIKeyboardWillHideNotification
■ UIKeyboardDidHideNotification

それぞれイベントのタイミングが違い、WillのほうがDidより先に呼ばれます。
これはキーボードがアニメーションして消える前後を表します。

では早速登録していきます。
以下はソースです。
//キーボードのイベント登録から取得まで
-(void)viewDidLoad
{
// キーボード表示時のイベント登録
[ [NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil
];
// キーボード非表示時のイベント登録
[ [NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasHidden:)
name:UIKeyboardDidHideNotification object:nil
];
}
// キーボード表示時
-(void)keyboardWasShown:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
CGSize keyboard_size = [ [info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;
}
// キーボード非表示時
-(void)keyboardWasHidden:(NSNotification*)notification
{
NSDictionary* info = [notification userInfo];
CGSize keyboard_size = [ [info objectForKey:UIKeyboardBoundsUserInfoKey] CGRectValue].size;
}



現在では下記URLのように修正されている。
[LANCARD.LAB]
画面いっぱいのUITextViewがキーボードに隠れないようにする

変更はキーボードサイズの取得部分だけです。
以下はその変更部のソース
// キーボードのサイズを取得する
NSDictionary* info = [notification userInfo];
//キーボードのCGRectを取得
CGRect keyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
keyboardRect = [[self.view superview] convertRect:keyboardRect fromView:nil];


そしたら次はボタンを作成します。
ボタンを作成するにはセレクターを利用します。
セレクタ―はメソッドへのポインターです。
詳しく知りたい人はコチラ
ソースについては以下になります。
//ボタンの生成とself.viewへの貼り付け
CGRect tmp_rect = CGRectMake(0,0,
keyboardRect.size.width,
keyboardRect.size.height);
UIButton *tmp_clear_button = [[[UIButton alloc] initWithFrame:tmp_rect] autorelease];
[tmp_clear_button addTarget:self
action:@selector(ClearButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:tmp_clear_button];


ボタンを押した時のメッセージはセレクタ―で登録したClearButtonPressed:が呼ばれます。
ここで透明ボタンを取り除き、キーボードを引っ込める処理を入れる。
ソースはこんな感じに
//ボタンを取り除き、キーボードを閉じる
-(IBAction)ClearButtonPressed:(UIButton *)sender{
NSLog(@"KeyBoard外が押されました。");
[textfield resignFirstResponder]; //firstResponderであるtextfieldに対して送る
}


その他参考サイト:
[テン*シー*シー]
iPhoneアプリ開発、その(169) UITextView使った事無かったわ~

[UITextField]
キーボードの通知
このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。