在UiCollectionView中处理Touch?

6 touch uigesturerecognizer ios uicollectionview swift

我有这个UICollectionView占据屏幕的主要部分,有一个UIButton显示菜单.当用户点击屏幕的任何一侧时,我想要隐藏菜单,这UICollectionView对我来说很不幸.尝试在其他视图下面的代码,它运作良好...但不是UICollectionView.该函数不会被调用.

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {            
   hidemenu()
   self.view.endEditing(true)            
}
Run Code Online (Sandbox Code Playgroud)

问题是什么?谢谢你的时间.

如何触发touchesBeganUIViewController哪里UICollectionView居住

这是项目.

Jat*_* JP 6

在点击滚动控制器(如UIScrollView,UITableView,UICollection等)时,不会调用touchesBegan方法.因为他们有自己的selector方法.为了处理这种情况,你需要创建UITapGestureUICollectionView.在点击时UICollectionView,它的选择器方法调用并执行您想要的任何操作.

以下是指导您的链接.如何创建双击手势UICollectionView.借助此功能,您还可以创建单击手势.

Collection View + Double Tap Gesture

编辑: 执行以下更改,它工作正常.

步骤1:声明handleTapSwipeMenuViewController.

func handleTap(sender: UITapGestureRecognizer) {

        println("called swipe")

    }
Run Code Online (Sandbox Code Playgroud)

第2步:创建SwipeMenuViewController控制器的全局变量.那是不合适的viewDidLoad()

var vc2 = SwipeMenuViewController()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

步骤3:声明TapGestureviewDidLoad()

var tap = UITapGestureRecognizer(target: vc2, action : "handleTap:")
        tap.numberOfTapsRequired = 1
        self.collectionView.addGestureRecognizer(tap)
Run Code Online (Sandbox Code Playgroud)

输出:

叫滑动

希望这对你有所帮助.


Ari*_*ora 6

您可以将 UITapGestureRecognizer 添加到 UICollectionView 并创建一个操作,以便在用户触摸集合外部或任何位置时关闭视图。

步骤 1创建点击手势以关闭视图

override func viewDidLoad() {
    super.viewDidLoad()
     ...

    let tap = UITapGestureRecognizer(target: self, action: #selector(didTapOutsideCollectionView(recognizer:)))
    tap.numberOfTapsRequired = 1
    self.collectionView.addGestureRecognizer(tap)
}
Run Code Online (Sandbox Code Playgroud)

步骤 2通过点击位置实施您想要的操作

@objc func didTapOutsideCollectionView(recognizer: UITapGestureRecognizer){
    let tapLocation = recognizer.location(in: self.view)
    //The point is outside of collection cell
    if collectionView.indexPathForItem(at: tapLocation) == nil {
         dismiss(animated: true, completion: nil)
    }
}
Run Code Online (Sandbox Code Playgroud)