Objective-C
iOS

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

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オブジェクトとして処理しています。