使用保存功能

时间:2017-11-24 15:40:45

标签: ios swift uiviewcontroller ibaction

我很难弄清楚如何实现保存功能来更新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"。

addGoalViewController

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

1 个答案:

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