简体   繁体   中英

Swift: add data from popUp to struct and show in tableview

I'm building an app to keep track of scores i have a struct

   */
var teamA_name: String!
var teamB_name: String!
var teamA_points: [Int] = []
var teamB_points: [Int] = []


/*
    - Add points to the teams
 */

mutating func addPoints(teamA: Int, teamB: Int){
    self.teamA_points.append(teamA)
    self.teamB_points.append(teamB)

}

as you can see i have two int arrays that will hold the user points. I have a controller with two tableviews to show the array of points added by the user, i'm going to skip some of the code since i know is not needed for my problem, this is my Main ViewController where tables will show the points

class GameScoreViewController: UIViewController {


/*
     - Properties
 */

var gameScore = GameScore()

override func viewDidLoad() {
    super.viewDidLoad()

    //- Setup delegates & datasources

    teamA_tableview.delegate = self
    teamA_tableview.dataSource = self

    teamB_tableview.delegate = self
    teamB_tableview.dataSource = self

    // - Button configuration

    addPointsButton.layer.cornerRadius = 5


}


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "toPopUp"{
        let popUpView = segue.destination as! PopUpViewController

            // this is where i call my popup view
        }
    }
}

}

now here is where my problem occurs, when i segue to my pop up and the user enters the score needed and taps done, the data doesn't append to the array and my tableview won't reload, i've tried many different ways, using callbacks, delegates, i tried userdefaults since is not very important data but nothing seems to work, and i'm stuck, this is my pop up view controller button action where it should happen, i left the textfield.text in the parameter for reference

@IBAction func addBtnPressed(_ sender: Any) {

    // this is the func to append data to the array
    gameScore.addPoints(teamA: Int(pointsTextField.text!)!, teamB: 0)



    self.dismiss(animated: true, completion: nil)

   //after dismissed it should reload table view or insert row with the user entered score 
}

any help will be appreciated, thank you.

It seems that you declare a separate instance inside the popup

 gameScore.addPoints(teamA: Int(pointsTextField.text!)!, teamB: 0)

You need to set a delegate to the real object in segue

let popUpView = segue.destination as! PopUpViewController
popUpView.delegate = self

And declare it inside the popup like

var delegate:GameScoreViewController?

Then use it

delegate?.addPoints(teamA: Int(pointsTextField.text!)!, teamB: 0)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM