Ios (Swift)外部视图中定义的UICollectionView中的didSelectItemAtIndexPath不';行不通
这是我的问题。我制作了一个视图控制器,它继承了UIViewController、UICollectionViewDataSource和UICollectionViewDelegate。所以,我有这个:Ios (Swift)外部视图中定义的UICollectionView中的didSelectItemAtIndexPath不';行不通,ios,iphone,swift,Ios,Iphone,Swift,这是我的问题。我制作了一个视图控制器,它继承了UIViewController、UICollectionViewDataSource和UICollectionViewDelegate。所以,我有这个: class myController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { ... } 然后,我创建了一个自定义视图,它有一个UICollectionView,类似这样: class e
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”方法事实上,我正在尝试实现这两种方法,但它们都没有执行。我完全确定我没有重写这个方法。好吧,在基本视图控制器中实现那个方法,在内部什么都不做,只在子类中重新实现,它应该可以工作;)