さて、Xcode 4.5/iOS 6 のタブ付きアプリケーション テンプレートを使用して、以下をテストしました。
- タブ付きアプリケーションを作成しました。
SampleButton という UIButton サブクラスを作成し、次のメソッドを実装しました。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event]; } - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesCancelled:touches withEvent:event]; } - (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesMoved:touches withEvent:event]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [super touchesEnded:touches withEvent:event]; }
この SampleButton を最初のタブに追加しました。
- すべてのタッチ メソッドにブレークポイントを追加しました。
- デバイスで実行します。
- すべてのタッチ メソッドが期待どおりに起動することをテストしました。
- SampleButton に触れてから、2 番目のタブも押します。
結果: ビューは 2 番目のタブに切り替わりますが、SampleButton で touchesCancelled および/または touchesEnded が呼び出されることはありません。そのボタンに触れている間にビューが変更された場合、それらのいずれかが起動するべきではありませんか? 私のアプリでは、そのボタンが押されている間にサウンドを再生しており、ユーザーがボタンを押しながらタブを切り替えても再生が停止しないため、これは大きな問題であることが証明されています。これは、iOS3およびiOS4で正常に機能していたようです。