サブビューはタッチを受け取っていません
-
28-10-2019 - |
質問
2つのサブビューを追加するメインビューコントローラーがあります。
- (void)viewDidLoad
{
[self init];
[super viewDidLoad];
//To shrink the view to fit below the status bar.
self.wantsFullScreenLayout = YES;
//We start off by displaying the background Images.
[self displayMenuSceneBackground];
//Then we show the Menus.
[self displayMenuSceneMenu];
}
ここでは、メインビューコントローラーにサブビューを追加します。どちらのサブビューも、インターフェイスビルダーを使用して構築されたビューコントローラーです。
-(void) displayMenuSceneBackground{
//Display the MenuSceneBackground View Controller
MenuSceneBackground *screen = [[MenuSceneBackground alloc] init];
[self.view addSubview:screen.view];
[screen release];
}
-(void) displayMenuSceneMenu{
//Display the MenuSceneMenu View Controller
MenuSceneMenu *screen = [[MenuSceneMenu alloc] init];
[self.view addSubview:screen.view];
[screen release];
}
どちらのサブビューも正しく表示され、Menuscenebackground View Controllerの一部でさえ正常に動作しますが、これらのサブビューはいずれもタッチイベントを受け取りません。
それらはすべてToucheSbeganを実装しますが、メインビューコントローラーのみがそれらを受け取ります。
Main View Controller UserInteractionをNOにして、Touchesbeganメソッドを実装していませんでしたが、これはタッチを無視するだけです。
どちらのサブビューも画面全体のサイズに表示されます。
私は同様の問題を読みましたが、反応は助けにはなりませんでした。
私はこれをサブビューに持っています
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
NSLog(@"testing MenuSceneMenu");
[self clicked_testing_alert]; //This is a UIAlertView for debugging
return;
}
事前に助けてくれてありがとう。
解決
uiviewcontrollerはuiviewと同じではないため、touchesbegan-eventsを受け取っていないことに注意してください。 (ビューではなく、ビューコントローラーにTouchesbeganを追加しました...)。
解決: :Simon Goldeenのおかげで、デモプロジェクトでTouchesbeganが呼ばれることがわかりました。しかし、私の生産プロジェクトでは、そうではありません。これが問題です:( Appleが推奨するように)あなたと私は使用しています - (void)release;
メモリの使用量を減らすため。 これにより、ToucheSbeganが呼び出されません。サイモンは使用しません release
, 、だから彼の状況では、彼らは呼ばれます。
他のヒント
問題はあなたが電話するときだと確信しています [super touchesBegan:touches withEvent:event];
から uiresponder その方法のドキュメント:
このメソッドのデフォルトの実装は何もしません。ただし、uiresponderの即時のuikitサブクラス、特にuiviewは、メッセージをレスポンダーチェーンに転送します。
したがって、uiviewcontrollerのデフォルトの動作は、レスポンダーチェーンをタッチアップすることです。これはあなたがやりたいことではないので(少なくともすぐにはありません)、あなたはあなたのコードからその行を削除するか、あなたがあなたの現在のビューであなたが必要ないか、あなたがあなたの現在のビューのタッチに応答したいと判断した後にそれを含めるか、それを含めるべきです。