Edited at

キーボードのタッチが後ろに伝搬してしまうバグ対応

More than 3 years have passed since last update.


Issue

iOSには

1. iOSにてキーボードウィンドウを出す

2. ホームボタンなどでアプリをバックグラウンドにする

3. アプリをフォアグラウンドにもどす

と、すると、キーボードの変換などをタッチした時に後ろのビューにタッチが伝搬してしまうというバグがあります。


Action

アプリがフォアグラウンドになるタイミングでUITextEffectsWindowのプロパティをごにょごにょすると後ろのviewのHitTestが発火しなくなります。

- (void)applicationWillEnterForeground:(UIApplication*)application

{
NSArray* windows = [[UIApplication sharedApplication] windows];
if ([windows count] > 1)
{
for (UIWindow* w in windows) {
if(!w.opaque && [[NSString stringWithFormat:@"%@", [w class]] isEqualToString:@"UITextEffectsWindow"])
{
BOOL hidden = w.hidden;
// 1度HiddenをYESにする
w.hidden = YES;
w.hidden = hidden;
break;
}
}
}
}

※UITextEffectsWindowはプライベートAPIなのでクラス名でフィルタしてUIWindowオブジェクトとして処理しています。