我很难弄清楚如何实现保存功能来更新View Controller中的文本。我一直在使用Wenderlich教程:https://www.raywenderlich.com/160519/storyboards-tutorial-ios-10-getting-started-part-2但是这是用于TableViewController并使用.append将保存的项目添加到数组中,因为我使用了我无法使用一个简单的View Controller。我想要一个保存在TableViewController中的字符串显示在View Controller中。这就是我到目前为止(saveGoal函数位于底部)。我需要添加到保存功能(或其他地方)?我是新手,所以任何帮助都将不胜感激!
import UIKit
class LoLGoalViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension LoLGoalViewController {
@IBAction func cancelToLoLGoalViewController(_ segue: UIStoryboardSegue) {
}
@IBAction func saveGoal(_ segue: UIStoryboardSegue) {
guard let addGoalsTableViewController = segue.source as? AddGoalsTableViewController,
let goal = addGoalsTableViewController.goal else {
return
}
}
}
这就是addGoalViewController的样子。我希望字符串goalText显示在View Controller中,它表示" Lorem ipsum dolor goal"。
这是addGoalsTableViewController的代码,其中goalText由用户输入:
import UIKit
class AddGoalsTableViewController: UITableViewController {
var goal:Goal?
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SaveGoal" {
let pointsNeededInt = Int(pointsNeededText.text!)
let pointsEarnedInt = Int(goalProgressText.text!)
goal = Goal(goalText: nameOfRewardText.text!, pointsToCompleteGoal: pointsNeededInt!, pointsEarnedTowardsGoal: pointsEarnedInt!)
}
}
@IBOutlet var goalTableTitleText : UILabel!
@IBOutlet weak var goalProgressText: UILabel!
@IBOutlet weak var nameOfRewardText: UITextField!
@IBOutlet weak var pointsNeededText: UITextField!
@IBOutlet weak var repeatSwitch: UISwitch!
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
这是struct Goal的代码:
import UIKit
struct Goal {
var goalText: String
var pointsToCompleteGoal: Int
var pointsEarnedTowardsGoal: Int
var repeatGoal: Bool
init(goalText: String, pointsToCompleteGoal: Int, pointsEarnedTowardsGoal: Int, repeatGoal: Bool = false) {
self.goalText = goalText
self.pointsToCompleteGoal = pointsToCompleteGoal
self.pointsEarnedTowardsGoal = pointsEarnedTowardsGoal
self.repeatGoal = repeatGoal
}
}
答案 0 :(得分:0)
正如@zombie建议的那样,使用带委托的协议代替你的保存功能。
1 创建公共协议:
protocol GoalDelegate: class {
func passGoal(_ goal: Goal?)
}
2 在AddGoalsTableViewController中创建一个委托:
var delegate: GoalDelegate?
3 当转到LolGoalViewController时,在prepareForSegue方法中,将委托设置为目标,并调用协议函数:
if let secondViewController = segue.destination as? LoLGoalViewController {
delegate = secondViewController
delegate?.passGoal(goal)
}
4 在LoLGoalViewController中,符合协议:
class LoLGoalViewController: UIViewController, GoalDelegate {
实施方法:
func passGoal(_ goal: Goal?) {
//do whatever you need with the goal
}