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只在我的視圖中保留一點空間 –

相關問題