Swift: 将popUp中的数据添加到struct并显示在tableview中
Swift: add data from popUp to struct and show in tableview
我正在构建一个应用程序来跟踪分数我有一个结构
*/
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)
}
如您所见,我有两个用于保存用户点数的整数数组。我有一个带有两个表视图的控制器来显示用户添加的点数组,我将跳过一些代码,因为我知道我的问题不需要这些代码,这是我的 Main 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
}
}
}
}
现在我的问题出现了,当我转到我的弹出窗口并且用户输入所需的分数并点击完成时,数据不会附加到数组并且我的 tableview 不会重新加载,我'我尝试了很多不同的方法,使用回调、委托,我尝试了 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
}
任何帮助将不胜感激,谢谢。
您似乎在弹出窗口中声明了一个单独的实例
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)
我正在构建一个应用程序来跟踪分数我有一个结构
*/
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)
}
如您所见,我有两个用于保存用户点数的整数数组。我有一个带有两个表视图的控制器来显示用户添加的点数组,我将跳过一些代码,因为我知道我的问题不需要这些代码,这是我的 Main 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
}
}
}
}
现在我的问题出现了,当我转到我的弹出窗口并且用户输入所需的分数并点击完成时,数据不会附加到数组并且我的 tableview 不会重新加载,我'我尝试了很多不同的方法,使用回调、委托,我尝试了 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
}
任何帮助将不胜感激,谢谢。
您似乎在弹出窗口中声明了一个单独的实例
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)