我有一個子類UIView
,姑且稱之爲TileView.m/h
。UIGestureRecognizer未能觸發的可能原因?
在TileView.m
,我有以下代碼:([setup]
肯定被調用,我用斷點檢查)。
- (void)setup {
self.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(testPressed:)];
[self addGestureRecognizer:tap];
}
- (void)testPressed:(UITapGestureRecognizer *)sender {
NSLog(@"tap pressed");
}
出於某種原因,當我點擊視圖時,不會調用testPressed
方法!
奇怪的是,如果我的TileView
類複製到空白的Xcode項目,並設置它在那裏,一切工作絕對沒問題。這是奇怪的,因爲手勢首先由子視圖和超級視圖處理 - 所以瓦片類不應受其超級視圖的影響。此外,該手勢完全包含在TileView
課程中。
作爲參考,拼貼視圖嵌套在: Controller -> controller's view -> scroll view -> container view -> tile view
模式中。
我曾嘗試沒有成功:
- 設置userInteractionEnabled = YES上TileView及其所有子視圖。
- 從代碼的其他部分刪除所有手勢識別器以避免干擾。
- 設置
tap.delegate = self
然後實施gestureRecognizer:shouldRecognizeSimultaneously...
總是return YES;
沒有運氣:/
的還有什麼可以走錯了任何的想法?或者我可以運行哪些測試來更詳細地瞭解問題?
編輯:更多細節
回想一下,平鋪視圖嵌套在:Controller -> controller's view -> scroll view -> container view -> tile view
如果我在控制器文件中添加手勢識別與:
[self.view addGestureRecognizer:tap]
,然後使用[self.view hitTest:[sender locationInView:self.view] withEvent:nil];
在事件處理程序,我可以看到,返回的視圖是一個UIScrollView
而不是TileView
正如所預期的。
此外,加入了手勢識別來代替self.scrollView
工作正常,但停止工作,如果我把它添加到self.containerView
(這是scrollView
唯一的子視圖)。 containerView
有userInteractionEnabled = YES
。
你忘了[tap setNumberOfTouchesRequired:1]; ? – 0x8badf00d
我剛剛嘗試過 - 它不幸的是沒有完成這個訣竅。 –
你確定'setup'方法被調用嗎? – msgambel