スポンサーサイト

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

[iOS]キーボードが閉じてから処理を開始する。

限定的なケースですが、今回このケースに当たったため記述しておきます。
キーボードを閉じた後に複雑にスレッドが絡んでくる場合、キーボードの閉じるアクションが最後に来るケースなどが存在します。

こういった場合はレスポンダーを外す処理の後に、キーボードのアニメーションが終了するまでの待機処理を入れる必要があります。

待機処理にはwhileループでのループ待機をおこない、変数を監視して所定の値になるのを待つようにします。


以下はソースになります。
//ヘッダファイルにて次のBOOL変数を用意してください。
@interface RootViewController : UIViewController
{
BOOL _keyboardshown;
}
@end

//まずはキーボードの通知を登録します。
-(void)viewWillAppear:(BOOL)animated{ //viewDidLoad内でもかまいません。
//こちらは UIKeyboardWillShowNotification でも良いと思いますが
//私のケースでは UIKeyboardDidShowNotification を使っています。
// キーボード表示時のイベント登録
[ [NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification
object:nil];

//こちらは必ず UIKeyboardDidHideNotification を使います。
//このイベントがキーボードの閉じるアニメーション終了時の呼び出しとなります。
// キーボード非表示時のイベント登録
[ [NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidHidden:)
name:UIKeyboardDidHideNotification
object:nil];
}


//登録した通知から呼び出されるメソッドを実装します。
//この時に、表示非表示状態を _keyboardshown に保管しておきます。

//キーボード表示
-(void)keyboardWasShown:(NSNotification*)notification
{
//キーボードが複数回呼ばれるケース(言語設定によるもの)への対応として、
//一度だけ呼び出すようにしています。
if(!_keyboardshown){
_keyboardshown = YES;
}
}

//キーボード非表示
-(void)keyboardDidHidden:(NSNotification*)notification
{
_keyboardshown = NO;
}


//最後に、キーボードを隠す処理をした後に処理を実行する
-(void)hoge{
[self.view endEditing:YES]; //ここで親・子のレスポンダーを解除します。

//ここでキーボード非表示になるので、それまでの待機を行います。
//待機処理をいれないと、メソッド終了後までキーボードが出たままになります
while (_keyboardshown) {
//currentRunLoop(全ての処理を回しているメインのループ)へ処理を0.5秒返す
//つまり、ここで0.5秒だけメインの処理が行われてキーボードが閉じる
//ここで _keyboardshown の変更があれば、次のループで抜けることができる。
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}

/*** ここにキーボードを閉じた後の処理を入れる ***/

}



参考URL:[iOS] 非同期処理を同期処理に変える
このエントリーをはてなブックマークに追加

tag : iOS キーボード 閉じる 閉じた 処理 実行

コメントの投稿

非公開コメント

Translation


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

チーズくん

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

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