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 

デリゲートの実装:(:didSelectItemAt:_) `メソッドあなたのためにそれを行う

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

こんにちは。あなたの答えと@duncanの答えを組み合わせてください。私は本当に近いです。私のアップデート –

+0

を参照してください。あなたがduncanの答えを使わず、shouldReceiveの実装がない場合でも起こりますか? –

+0

私はduncanの答えを使用しない場合、collectionViewはまだ動作しません –

0

ジェスチャ認識機能を使用しないでください。それはあなたのタップを傍受しており、コレクションビューにそれらを与えていません。代わりにcollectionView(_:didSelectItemAt:)メソッドでview.endEditing(true)に電話をかけてください。

+0

が' 'collectionViewにview.endEditing(真)'呼び出していないだろう? –

+0

とにかく、view.endEditing(true)をcollectionView(_:didSelectItemAt :)に置くのではなく、キーボードを閉じますか? –

+0

私のコレクションビューは私のビュー内にわずかなスペースしか持たないので、 –

関連する問題