0

一旦我使用addGestureRecognizer关闭scrollView中的键盘,collectionView的didSelectItemAt将无法工作。有什么建议么?collectionView的didSelectItemAt与UITapGestureRecognizer一起使用时不会调用

更新代码:目前,我可以点击以关闭键盘,然后点击以采集单元格。但是,如果我滑动scrollView,键盘将消失。任何方式来防止呢?

class PostVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    @IBOutlet weak var colorCollectionView: UICollectionView! 
    @IBOutlet weak var scrollView: UIScrollView! 
    @IBOutlet weak var titleTextField: UITextField! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let tapViewGesture = UITapGestureRecognizer(target: self, action: #selector(PostVC.didTapViewForDismissKeyboard)) 
     scrollView.addGestureRecognizer(tapViewGesture) 
     tapViewGesture.delegate = self 
    } 

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool{ 
     view.endEditing(true) 
     return false 
    } 

    func didTapViewForDismissKeyboard(_ pressed: UIGestureRecognizer) { 
     view.endEditing(true) 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     print("HIHI") 
    } 

extension PostVC: UIGestureRecognizerDelegate { 
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 
} 

回答

1

尝试实施UIGestureRecognizerDelegate。在你的代码中实现它的gestureRecognizer(_:shouldRecognizeSimultaneouslyWith:)方法返回true - 这样你的手势识别器就可以工作,但是它也可以识别其他手势(特别是collectionView中的手势)。

代码:

// add this to initializing code to set gesture recognizer's delegate to self 
tapViewGesture.delegate = self 

委托执行:

extension YourViewController: UIGestureRecognizerDelegate { 
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
     return true 
    } 
} 
+0

嗨。结合你的答案和@duncan答案。我非常接近。请参阅我的更新 –

+0

这是否发生,即使你不使用邓肯的答案,并且没有shouldReceive实现? –

+0

如果我不使用邓肯的答案,collectionView仍然不起作用 –

0

请勿使用手势识别器。这是拦截你的水龙头,而不是让他们收集视图。请将view.endEditing(true)拨打collectionView(_:didSelectItemAt:)方法。

+0

会不会调用'view.endEditing(真)'的'的CollectionView(_:didSelectItemAt:)'方法为你做的? –

+0

无论如何解散键盘,而不是把view.endEditing(true)放在collectionView(_:didSelectItemAt :)中? –

+0

因为我的collectionview只在我的视图中保留一点空间 –

相关问题