Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
744 views
in Technique[技术] by (71.8m points)

ios - Updating text in ViewController using Save function

I'm having a hard time figuring out how to implement the save function to update text in a View Controller. I've been working from the Wenderlich tutorial: https://www.raywenderlich.com/160519/storyboards-tutorial-ios-10-getting-started-part-2 but that is for a TableViewController and uses .append to add saved items to an array, which I can't use since I'm using a simple View Controller. I want a string that's saved in a TableViewController to be displayed in the View Controller. This is what I have so far (the saveGoal function is at the bottom). What do I need to add to my save function (or elsewhere)? I'm new to this so any help would be greatly appreciated!

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
        }

    }
}

This is what the addGoalViewController looks like. I want the string goalText to show up in the View Controller where it says "Lorem ipsum dolor goal".

addGoalViewController

This is the code for the addGoalsTableViewController where goalText is input by the user:

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

This is the code for 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
    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Instead of your save function, use a protocol with a delegate, as @zombie has suggested.

1 Create a public protocol:

protocol GoalDelegate: class {
    func passGoal(_ goal: Goal?)
}

2 Create a delegate in AddGoalsTableViewController:

var delegate: GoalDelegate?

3 When segueing to LolGoalViewController, in the prepareForSegue method, set the delegate to be the destination, and call the protocol function:

if let secondViewController = segue.destination as? LoLGoalViewController {
    delegate = secondViewController
    delegate?.passGoal(goal)
}

4 In LoLGoalViewController, conform to the protocol:

class LoLGoalViewController: UIViewController, GoalDelegate {

Implement the method:

func passGoal(_ goal: Goal?) {
    //do whatever you need with the goal
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share

2.1m questions

2.1m answers

63 comments

56.6k users

...