3 回答

TA貢獻1828條經驗 獲得超3個贊
好吧,經過一些搜索手勢識別器文檔后終于找到了它。
解決方案是實現UIGestureRecognizerDelegate并添加以下內容:
////////////////////////////////////////////////////////////
// UIGestureRecognizerDelegate methods
#pragma mark UIGestureRecognizerDelegate methods
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isDescendantOfView:autocompleteTableView]) {
// Don't let selections of auto-complete entries fire the
// gesture recognizer
return NO;
}
return YES;
}
這照顧了它。希望這對其他人也有幫助。

TA貢獻1829條經驗 獲得超13個贊
解決此問題的最簡單方法是:
UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(tap:)];
[tapRec setCancelsTouchesInView:NO];
這樣可以UIGestureRecognizer識別敲擊并將觸摸傳遞給下一個響應者。這種方法的一個意想不到的后果是,如果你有一個UITableViewCell推動另一個視圖控制器的屏幕。如果用戶點擊該行以關閉鍵盤,則將識別鍵盤和推送。我懷疑這是你想要的,但這種方法適用于許多情況。
另外,擴展羅伯特的答案,如果你有一個指向相關的tableview的指針,那么你可以直接比較它的類而不必轉換為字符串,并希望Apple不會改變命名法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch
{
if([touch.view class] == tableview.class){
return //YES/NO
}
return //YES/NO
}
請記住,您還必須聲明UIGestureRecognizer具有此代碼的委托。

TA貢獻1851條經驗 獲得超3個贊
將cancelsTouchesInView識別器設置為false。否則,它會“消耗”觸摸本身,并且不會將其傳遞給表格視圖。這就是選擇事件永遠不會發生的原因。
例如在 swift
let tapOnScreen: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "CheckTheTime")
tapOnScreen.cancelsTouchesInView = false
view.addGestureRecognizer(tapOnScreen)
- 3 回答
- 0 關注
- 784 瀏覽
添加回答
舉報