Search code examples
swiftmethodsstoryboardsegueuicontainerview

How to trigger a method on my container view manually?


I do have a View, in which I embedded a ContainerView. I fill my labels on my ContainerView the first time here

class UpperLower { ...
override func prepare(for segue: UIStoryboardSegue, sender: Any!) {

    let PlayerInfoHeaderView = segue.destination as? PlayerInfoHeader

    PlayerInfoHeaderView?.player1 = player1
    PlayerInfoHeaderView?.player2 = player2
    PlayerInfoHeaderView?.game    = game
   }
}

The Segue triggers the viewDidLoad() where I call the method updateUI()

class PlayerInfoHeader: UIViewController { ...

override func viewDidLoad() {
    super.viewDidLoad()
    updateUI(game: game)
}
func updateUI(game: Player.Game) {
    player1NameLabel.text = player1.name
    player2NameLabel.text = player2.name

    switch game {

    case .UpperLower:
        player1PointsLabel.text    = "Points: \(player1.points.UpperLower)"
        player1WinrateLabel.text   = "Winrate: \(player1.winrates.UpperLower) %"
        player1RoundsWonLabel.text = "Rounds Won: \(player1.roundswon.UpperLower)"

        player2PointsLabel.text    = "Points: \(player2.points.UpperLower)"
        player2WinrateLabel.text   = "Winrate: \(player2.winrates.UpperLower)"
        player2RoundsWonLabel.text = "Rounds Won: \(player2.roundswon.UpperLower)"

}

Now, after every round played, I also want to update my UI. I tried a lot of things, but I have no clue, how to trigger the UpdateUI() out of my UpperLower manually. I know that I need a reference to my embedded container view. But how can I get this reference outside of the segue context? Is there an easy way to solve my problem?

PS: I did all my UI work on the storyboard.


Solution

  • Set a weak property (to avoid retain cycle) in PlayerInfoHeader to keep a reference to your parent

    weak var parentVC: UpperLower?

    Set the property in prepareForSegue

    PlayerInfoHeaderView.parentVC = self