Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios (Swift)外部视图中定义的UICollectionView中的didSelectItemAtIndexPath不';行不通_Ios_Iphone_Swift - Fatal编程技术网

Ios (Swift)外部视图中定义的UICollectionView中的didSelectItemAtIndexPath不';行不通

Ios (Swift)外部视图中定义的UICollectionView中的didSelectItemAtIndexPath不';行不通,ios,iphone,swift,Ios,Iphone,Swift,这是我的问题。我制作了一个视图控制器,它继承了UIViewController、UICollectionViewDataSource和UICollectionViewDelegate。所以,我有这个: class myController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { ... } 然后,我创建了一个自定义视图,它有一个UICollectionView,类似这样: class e

这是我的问题。我制作了一个视图控制器,它继承了UIViewController、UICollectionViewDataSource和UICollectionViewDelegate。所以,我有这个:

class myController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
...
}
然后,我创建了一个自定义视图,它有一个UICollectionView,类似这样:

class externalCollectionView: UIView {
    var myCollection: UICollectionView?

    override init(frame: CGRect){
        super.init(frame: frame)
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 10, left: 20, bottom: 10, right: 20)
        layout.itemSize = CGSize(width: 130, height: 130)
        layout.minimumLineSpacing = 10
        layout.minimumInteritemSpacing = 10

        myCollection = UICollectionView(frame: CGRectMake(0, 120, frame.size.width, frame.size.height - 120), collectionViewLayout: layout)
        myCollection!.registerNib(UINib(nibName: "customCellView", bundle: nil), forCellWithReuseIdentifier: "myItem")

        self.addSubview(myCollection!)
    }
}
因此,在我的视图控制器中,我在viewDidLoad方法中使用以下代码设置委托方法和功能:

    customView = externalCollectionView(frame: self.view.frame)
    customView.myCollection!.dataSource = self
    customView.myCollection!.delegate = self
    customView.myCollection!.userInteractionEnabled = true
    customView.myCollection!.allowsMultipleSelection = true

这样,就不会调用didSelectItemAtIndexPath方法。是的,我有一个自定义的单元格集合视图(在xib中),但我甚至在没有图形元素的情况下创建了它(空),并且没有调用该方法。我已经实现了我在互联网上找到的几种解决方案,但都不起作用。有人知道发生了什么吗

您是否尝试从Storyboard或Xib将UICollectionViewCell连接到文件的所有者委托和数据源?也许这会有所帮助

您只需将自定义视图的
userInteractionEnabled
设置为
true
。如果父视图未启用用户交互,则其子视图将无法识别任何触摸事件。

是否缺少super.init()调用?抱歉@pbasdf,我调用super.init()。我已经编辑过了。其他触摸事件是否正在传递到集合视图-滚动是否正常?@pbasdf否,滚动不起作用。但是我没有其他视图可以阻止交互。视图控制器本身是如何显示的?其他方法,例如numberOfItemsInSection和cellForItemAtIndexPath执行得很好。唯一的情况是DidSelectItemAtIndexPath是否确实没有意外重写-(void)collectionView:(UICollectionView*)collectionView DidDecelectItemAtIndexPath:(NSIndexPath*)indexPath?选中“select”和“deselect”方法事实上,我正在尝试实现这两种方法,但它们都没有执行。我完全确定我没有重写这个方法。好吧,在基本视图控制器中实现那个方法,在内部什么都不做,只在子类中重新实现,它应该可以工作;)