0

我有一个UICollectionViewCell. 此 Cell 注册在另一个 UICollectionViewCell 中,而后者又注册在viewDidLoad一个UIViewController被调用的FilterCollectionViewController. 选择第一个单元格时,应将字符串类型的值传递给a UIButton。这个 UIButton 位于FilterCollectionViewController

FilterCollectionViewController我做了一个变量叫做colorName

var colorName: String!{
    didSet {
        print(colorName)
    }
}

在同一个班级里有一个UIButton

@objc func addButtonFunc(sender:UIButton){
    print(colorName)
    }

FilterCollectionViewController我声明一个UICollectionView. 在这个 collectionView 中有一个 "second" UICollectionView,它具有以下功能:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let filterVC = FilterCollectionViewController()
    filterVC.colorName = "blau"    
}

单击第二个单元格时,我可以从(在 main 中)UICollectionView打印 colorName 值。但是,我希望将其传递给. 单击此 UIButton 时,应进一步处理此字符串。然而该方法导致didSetFilterCollectionViewControllerUIButtonprintnil

4

3 回答 3

0

首先,您必须转到情节提要并将标识符“yourViewId”设置为

过滤器集合视图控制器

然后

在这个方法中

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    let viewController = self.storyboard.instantiateViewController(withIdentifier:"yourViewId") as! FilterCollectionViewController
viewController.colorName = "red"
self.present(viewController, sender:nil)
}
于 2018-12-28T17:36:28.270 回答
0

我找到了问题的答案。

在父母中FilterCollectionViewController,我做了一个变量colorName,比如

var colorName: String!

在第二个中,UIVieControllerCell我声明了父 ViewController 类的变量

var colorName: FilterCollectionViewController?

因此,在函数的第二个 UICollectionView 中,didSelectItemsAt我添加了以下代码

colorName?.colorName = "blau"

这必须在第一个UICollectionview、第二个的父级UICollectionView和 的一个子级中再次声明FilterCollectionViewController。声明在函数中cellForItemAt

cell.colorName = self

就是这样。单击按钮时颜色名称会更新。

这是缩写代码:

class FilterCollectionViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

var colorName: String!

override func viewDidLoad() {
        super.viewDidLoad()
//...register UICollectionview declare button etc.
}

 @objc func addButtonFunc(sender:UIButton){  
    print(colorName)
}

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 5
}

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cellID", for: indexPath) as! FilterCell

        cell.colorName = self

        return cell
    }

在 FilterCell 类中:

var colorName: FilterCollectionViewController?
//Class is initialised with  function, in the function another UUICollectionView is registered.
//...functions like numberOfItemsInSection and cellForItemAt are declared

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    colorName?.colorName = "blau"

}
于 2019-01-07T08:35:11.097 回答
0

FilterCollectionViewController如果你在同一个班级,你不应该创建一个新的实例,其他的东西看起来很好,

创建一个变量,例如,

var colorName: String {
    didSet {
        print(colorName)
    }
}

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    colorName = "blau"  
}

然后在addButton行动中,

@objc func addButton(sender: UIButton){
    print(colorName)
}
于 2018-12-28T15:47:40.303 回答