我通过在自定义协议中制定协议来完成此任务
UICollectionViewCell,并将这些事件委托给
UIViewController,就像这样
在你的MyCollectionViewCell
protocol MyCollectionViewCellDelegate: class { func didLongPressCell()}class MyCollectionViewCell:UICollectionViewCell { weak var delegate:MyCollectionViewCellDelegate? func longPressAction() { if let del = self.delegate { del.didLongPressCell } }}
然后回到你的MyViewController
class MyViewController:UIViewController, MyCollectionViewCellDelegate { func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! MyCollectionViewCell cell.delegate = self return cell } func didLongPressCell() { // do what you want with the event from the cell here }}
要记住的重要位是为每个单元格设置委托
cell.delegate = self
并在您要在其中接收事件的视图控制器中采用新协议
class MyViewController:UIViewController, MyCollectionViewCellDelegate
我还没有测试过这段代码,也不确定在这样的每个单元格中存储对viewController的引用的最佳实践,但是我做的非常相似,请告诉我您的情况。
编辑: 如果您已经将您的子类化,
UICollectionView则将其传递给视图控制器一个引用,以便您可以像这样使用它。
您MyViewController
现在看起来像这样
class MyViewController:UIViewController { override func viewDidLoad() { super.viewDidLoad() let collectionView = MyCollectionView() collectionView.viewController = self self.view.addSubview(collectionView) }}
还有您的自定义收藏夹视图MyCollectionView
class MyCollectionView:UICollectionView, MyCollectionViewCellDelegate { weak var viewController:UIViewController? func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! MyCollectionViewCell cell.delegate = self return cell } func didLongPressCell() { if let vc = self.viewController { // make use of the reference to the view controller here } }}
该UICollectionViewCell
会和以前一样
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)