如何将数据从viewcontroller传递到相应的UICollectionView单元格?

时间:2016-05-18 12:02:54

标签: ios swift uicollectionview

我正在建立一个小型iOS游戏,用户可以在集合视图中对玩家列表中的玩家出价。

在下图中的第三个视图控制器中,如何让出价显示在相应播放器的collectionviewcell中?

The three view controllers

第一个视图控制器

带有玩家UI收集视图的vc。用户在这里选择一个玩家。

第二视图控制器

在此目的地vc中,用户为所选播放器设置出价。

包含一个滑块:

override func viewDidLoad() {
    super.viewDidLoad()

    configureSlider()
}

配置如下:

func configureSlider() {
    if let playerProfile = player {
        let minPrice = playerProfile.minPrice
        bidSliderLabel.value = Float(minPrice)
    }
}

准备segue方法将出价值发送给第三个控制器:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "bidResults") {
        let svc = segue.destinationViewController as! transferResultsViewController;

        svc.bidSet = "\(bidSliderLabel.value)"

    }
}

第3个视图控制器

vc 2中设置的出价存储在bidSet变量中:

var bidSet: String?

现在我想将UILabel添加到包含出价的collectionviewcell:

@IBOutlet weak var bidSetLabel: UILabel!

override func viewDidLoad() {
    super.viewDidLoad()
    bidSetLabel.text = bidSet
}

但是这个bidSetLabel应该只用于一个collectionview单元格:包含收到出价的玩家的单元格。

我怎样才能做到这一点?

解决方案

正如Philip Mills在评论中所建议的那样,我最终使用的是数据模型而不是segues。我将出价值存储在实例中的第二个VC中,使VC 3可以访问它。

1 个答案:

答案 0 :(得分:0)

您需要将Label添加到每个collectionView单元格。最初提供bidSetLabel heightConstraint.constant=0

当您想要显示bidSetLabel时,只需传递该特定单元格的索引,并将高度设置为您对该特定单元格的任何喜好。 heightConstraint.constant=50。{/ p>

或者,如果您使用单元格中显示的数据并将高度设置为Player,则还可以制作跟踪唯一player_uid属性的heightConstraint.constant=50类。