我有一个UICollectionView
,它显示图像的缩略图。当我点击该单元格(缩略图)时,我使用下面的功能推入另一个UIViewController
,然后可以下载并查看缩略图的放大图像。每个单元格中都有一个UIButton
。我想展示另一个viewController
,它将用作自定义弹出窗口,希望显示有关图像的更多详细信息,例如文件名,日期等。 action
类,并且在UICollectionViewCell
函数方法中,我无法“呈现”此自定义IBAction
。 UIViewController
只是不承认“现在”。有人可以请教吗?
Xcode
自定义:
class CollectionViewFolder: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate ,UICollectionViewDelegateFlowLayout{
...
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
}
...
}
答案 0 :(得分:2)
在您的CollectionViewFolderCell.swift
protocol CollectionViewFolderCellDelegate {
func collectionViewFolderCellDidPressButton()
}
在CollectionViewFolderCell
内声明一个委托,如:
var delegate: CollectionViewFolderCellDelegate?
在按钮操作中添加:
@IBAction func moreInfoBtn(_ sender: Any) {
delegate?.collectionViewFolderCellDidPressButton()
}
在您的cellForItemAtIndexPath方法中,添加cell.delegate = self
func collectionView(collectionView: UICollectionView,
cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CollectionViewFolderCell
cell.delegate = self
return cell
}
此外,在View Controller中,您还需要符合CollectionViewFolderCellDelegate
extension CollectionViewFolder: CollectionViewFolderCellDelegate {
// here you can present your desired view controller
}
答案 1 :(得分:1)
present(_:animated:completion:)
是UIViewController
。
为了能够显示(呈现,推送,弹出等)另一个UIViewController
,您必须是UIViewController(或者在推送等情况下为特定的UIViewController)。因此,CollectionViewFolderCell
无法展示您的新UIViewController
。
然后,您需要告诉UIViewController
(在您的情况下为CollectionViewFolder
)(例如,您的情况为CollectionViewFolderCell
通过其UICollectionView
)来执行此操作。为此,您可以使用委托模式或闭包。
带有封闭符的快速示例代码:
向CollectionViewFolderCell
添加属性:
var onMoreInfoTap: ((ParamTypeOrClass1, ParamTypeOrClass2, etc) -> Void)?
然后修改您的方法:
@IBAction func moreInfoBtn(_ sender: Any) {
//Compute all your params, let's name them param1, param2, etc.
self.onMoreInfoTap?(param1, param2, etc.
}
在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
上:
cell.onMoreInfoTap = { [weak self] (param1Name, param2Name, etc) in
let viewController = //Create your target UIViewController
//Set its customs var according to Param1Name, Param2Name, etc.
self?.present(viewController, animated: true, completion:nil)
}