从 UICollectionViewCell 访问保存在 UIViewController 中的变量?

Posted

技术标签:

【中文标题】从 UICollectionViewCell 访问保存在 UIViewController 中的变量?【英文标题】:Access variable saved in UIViewController from UICollectionViewCell? 【发布时间】:2020-09-27 16:13:09 【问题描述】:

我有一个 MainViewController (MainVC.swift) 和一个 CellViewController (CellVC.swift)。 我的 MainViewController 包含一些标签、按钮和一个 Collection View。此 Collection View 的单元格由 CellViewController 控制(我有一个 Cell.xib 文件)。

在我的 MainViewController 中,我保存了一些我想在 CellViewController 中使用的变量(floatRatingViewWidth、floatRatingViewHeight)。

如何从 CellViewController 访问这些变量?

MainViewController

class MainVC: UIViewController 
    @IBOutlet weak var collectionView: UICollectionView!

    var floatRatingViewWidth = CGFloat()
    var floatRatingViewHeight = CGFloat()
    
    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        collectionView.register(UINib(nibName: "Cell", bundle: nil), forCellWithReuseIdentifier: "myCell")
        collectionView.delegate = self
        collectionView.dataSource = self
 
        settingUpNavBar()
        
        let cellHeight = view.frame.size.height * 0.3
        let cellWidth = view.frame.size.width * 0.42
        
        floatRatingViewWidth = cellWidth - 69
        floatRatingViewHeight = cellHeight * 0.05

    


CellViewController

class CellVC: UICollectionViewCell 

    @IBOutlet weak var ratingHeight: NSLayoutConstraint!
    @IBOutlet weak var ratingWidth: NSLayoutConstraint!
    
    override func awakeFromNib() 
        super.awakeFromNib()
        // Initialization code

    


【问题讨论】:

你有collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 吗? 【参考方案1】:

在您的单元格中添加您需要的变量:

class CellVC: UICollectionViewCell 
    var cellFloatRatingViewWidth : CGFloat?
    var cellFloatRatingViewHeight = CGFloat?

在你的:

 func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

做:

cell.cellFloatRatingViewWidth = floatRatingViewWidth 

【讨论】:

谢谢!它有效(但我立即访问网点)!是否有可能执行“让 mainVC = MainVC()”之类的操作,然后从实例访问数据?我知道这段代码不起作用,但可能与此类似? 这不是一个好主意,因为您正在使用 mainVC 的新实例,因此如果有任何数据更改,每个实例中的数据都会有所不同。你可以做的是创建一个只有变量的类,在 mainvc 中实例化它,设置数据并传递整个类。 有道理^^非常感谢!

以上是关于从 UICollectionViewCell 访问保存在 UIViewController 中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从不同的方法访问 UICollectionViewCell 中标签的文本?

从 UICollectionViewCell 访问保存在 UIViewController 中的变量?

从单元格内的 ScrollView 访问 UICollectionViewCell 的索引

如何通过 UICollectionView 访问 UICollectionViewCell?

如何从自定义 UICollectionViewCell 启动 View Controller

UICollectionViewCell 获得对其父 UICollectionViewController 的访问权限