亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UITapGestureRecognizer中斷了UITableView didSelectRow

UITapGestureRecognizer中斷了UITableView didSelectRow

iOS
繁星coding 2019-09-19 15:10:24
我已經編寫了自己的函數來在鍵盤出現時向上滾動文本字段。為了通過點擊文本字段來關閉鍵盤,我創建了一個UITapGestureRecognizer在點擊時關注文本字段上的第一響應者的工作。現在,我還為UITableView文本字段創建了一個自動完成功能,在文本字段正下方創建一個自動填充,并在用戶輸入文本時用項目填充它。但是,當選擇自動完成表中的一個條目時,didSelectRowAtIndexPath不會被調用。相反,似乎輕敲手勢識別器正在被調用并且剛剛辭職第一響應者。我猜是有一些方法可以告訴水龍頭手勢識別器繼續將點擊消息傳遞給UITableView,但我無法弄清楚它是什么。任何幫助將非常感激。
查看完整描述

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;

}

這照顧了它。希望這對其他人也有幫助。


查看完整回答
反對 回復 2019-09-19
?
烙印99

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具有此代碼的委托。


查看完整回答
反對 回復 2019-09-19
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

將cancelsTouchesInView識別器設置為false。否則,它會“消耗”觸摸本身,并且不會將其傳遞給表格視圖。這就是選擇事件永遠不會發生的原因。


例如在 swift


let tapOnScreen: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "CheckTheTime")

tapOnScreen.cancelsTouchesInView = false

view.addGestureRecognizer(tapOnScreen)


查看完整回答
反對 回復 2019-09-19
  • 3 回答
  • 0 關注
  • 784 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號