[cocos2d-x]iAd と EAGLView.mm#canBecomeFirstResponder 問題

cocos2d-x

※現在ではこの問題に対処されている模様です。

cocos2d-x のバグというかたぶん対応してないだけな気がするけど、iAd のダミー広告を開いて閉じるとなぜかソフトウェアキーボードが表示されてしまう。本番環境でどのように動作するのかはわからないけど同様に動作したら非常にマズイ。知識不足のためにさっぱりわからないけど EAGLView.mm の canBecomeFirstResponder で NO を返せばこの問題は解決する???解決するかどうかは不明だけどとりあえずキーボードは出てこなくなる。

しかし…

CCIMEDelegate#attachWithIME メソッドが

効かなくなる orz

上の方法で iAd を閉じた時のキーボード表示を防ぐと CCIMEDelegate#attachWithIME#attachWithIME メソッドをコールしてもキーボードが表示されなくなってしまう。CCTextFieldTTF などによる文字入力を行わないアプリならば全く問題がないのだけれど、自分のアプリでは使用しているため困ってしまった。

仕方ないので

EAGLView に 条件分岐用に bool 変数を作って、attachWithIME をコールする直前に この変数に YES をセットして、canBecomeFirstResponder の返り値を分岐させることで解決した…?現状はこれでうまく動いている。とりあえず問題なさそうなのでこれでいいや。以下のような感じにして分岐。

// @ EAGLView.mm
- (BOOL)canBecomeFirstResponder
{
	if (nil != markedText_) {
		[markedText_ release];
	}
    markedText_ = nil;

  // !!!: iAd 対策
  // キーボードを表示させたいときは attachWithIME() をコールする直前に boolForIAdIssue = YES を実行しておく
  if ( boolForIAdIssue ) {
    boolForIAdIssue = NO;
    return YES;
  } else {
    return NO;
  }
}

なんか根本的な問題は全くわかってないし、いろいろダメな気がするけどまぁいいや。

Share
関連記事