UItableViewCell嵌套使用UICollectionView,讓CollectionView空白部分點(diǎn)擊事件傳遞下去

在UITableViewCell或者其他View里嵌套使用CollectionView場(chǎng)景里,如何在點(diǎn)擊CollectionView空白或者沒有補(bǔ)全cell的地方,將點(diǎn)擊事件傳遞下去,即TableView的DidSelected的代理方式上面?

示例圖

需要實(shí)現(xiàn)的效果:

效果

方法1:在部分場(chǎng)景下,我們空白很小,最多的是:沒有不全的Cell的位置點(diǎn)擊沒有反應(yīng)。

這種情況我們可以補(bǔ)一個(gè)空的UICollectionViewCell,將UICollectionViewCell的點(diǎn)擊事件通過代理傳遞出去。也可以手動(dòng)修改UICollectionView的frame,或者通過貝塞爾曲線繪制邊界,但是比較麻煩。

方法2:添加手勢(shì)。

給UICollectionView加手勢(shì),但是UICollectionview的didselect 事件會(huì)和手勢(shì)沖突。
我們可以通過手勢(shì)的代理解決這個(gè)問題:

  func addGes() {
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(collectionViewClick))
        tapGesture.delegate = self
        self.collectionView.addGestureRecognizer(tapGesture)
        
    }
  
    @objc private func collectionViewClick() {
        self.delegate?cellCollectionViewClick(self)
    }

    

class JPDynamicBottomItemView: UIGestureRecognizerDelegate {
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
        // 當(dāng)前collectionCell上是圖片,那么點(diǎn)擊圖片就不需要相應(yīng)手勢(shì)
        if let view = touch.view, view.isKind(of: UIImageView.self) {
            return false
        }
        return true
    }
}


方法3:利用響應(yīng)鏈,讓事件傳遞到tableview上

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        
        if let view = super.hitTest(point, with: event) {
            if view.isKind(of: UICollectionView.self) {
                return self
            }
        }
        return super.hitTest(point, with: event)
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容