Swift: добавить данные из popUp в структуру и показать в виде таблицы - PullRequest
0 голосов
/ 04 октября 2019

Я создаю приложение для отслеживания результатов. У меня есть структура

   */
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)

}

, как вы можете видеть, у меня есть два массива типа int, которые будут удерживать пользовательские очки. У меня есть контроллер с двумя табличными представлениями, чтобы показать массив точек, добавленных пользователем, я собираюсь пропустить часть кода, так как я знаю, что не нужен для моей проблемы, это мой главный ViewController, где таблицы будут показывать точки

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
        }
    }
}

}

Теперь вот где моя проблема возникает, когда я обращаюсь к своему всплывающему окну, и пользователь вводит необходимый счет и нажимает, готово, данные не добавляются в массиви мое табличное представление не будет перезагружаться, я пробовал много разных способов, используя обратные вызовы, делегаты, я пробовал userdefaults, так как не очень важные данные, но, кажется, ничего не работает, и я застрял, это моя кнопка контроллера всплывающего представлениядействие, где это должно произойти, я оставил textfield.text в параметре для справки

@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 
}

любая помощь будет оценена, спасибо.

1 Ответ

0 голосов
/ 04 октября 2019

Кажется, что вы объявляете отдельный экземпляр внутри всплывающего окна

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

Вам нужно установить делегат для реального объекта в segue

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

И объявить его внутри всплывающего окнакак

var delegate:GameScoreViewController?

Тогда используйте его

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