How to transfer label data to new controller label after label number is set with button

a 夏天 提交于 2019-12-11 17:15:17

问题


So how i transfer my ViewController label: totalPar to ThirdViewController label: totalPar5. And I want to transfer data that I have added there with my minus and plus buttons

Here is simulator pic that show what I want to transfer

My ThirdViewController is almost same as ViewController except prepare segue

Here is my ViewController

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var totalPar: UILabel!
@IBOutlet weak var plusminusPar: UILabel!
@IBOutlet weak var currentPar: UILabel!


var totalPAR = Int()
var plusminusPAR = 0
var currentPAR = 0



override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}


@IBAction func minusButton(_ sender: Any) {

    totalPAR = Int(totalPar.text!)!
    self.totalPar.text = String(totalPAR - 1)

    plusminusPAR = Int(plusminusPar.text!)!
    self.plusminusPar.text = String(plusminusPAR - 1)

    currentPAR = Int(currentPar.text!)!
    self.currentPar.text = String(currentPAR - 1)
}

@IBAction func plusButton(_ sender: Any) {

    totalPAR = Int(totalPar.text!)!
    self.totalPar.text = String(totalPAR + 1)

    plusminusPAR = Int(plusminusPar.text!)!
    self.plusminusPar.text = String(plusminusPAR + 1)

    currentPAR = Int(currentPar.text!)!
    self.currentPar.text = String(currentPAR + 1)
}



@IBAction func Seuraava(_ sender: Any) {
    self.performSegue(withIdentifier: "next1", sender: Any?.self)
}


@IBAction func seiraava2(_ sender: Any) {
    self.performSegue(withIdentifier: "seuraava2", sender: Any?.self)
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let thirdviewcontroller = segue.destination as! ThirdViewController
    thirdviewcontroller.totalPAR5 = self.totalPAR
}


}

回答1:


From the accepted answer and its comments you need to start improving your code and learn some concepts of data source in general.

For your case stop constantly converting string to integers to string. Choose one or the other:

class ViewController: UIViewController {

var totalPAR: Int = 0
var plusminusPAR: Int = 0
var currentPAR: Int = 0

Do natural operations on actions and separate methods:

@IBAction func minusButton(_ sender: Any) {
    addToAll(valueToAdd: -1)
    refreshLabels()
}

private func addToAll(valueToAdd: Int) {
    totalPAR += valueToAdd
    plusminusPAR += valueToAdd
    currentPAR += valueToAdd
}

private func refreshLabels() {
    self.totalPar.text = String(totalPAR)
    self.plusminusPar.text = String(plusminusPAR) 
    self.currentPar.text = String(currentPAR)
}

Then you will have no issues calling

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let thirdviewcontroller = segue.destination as? ThirdViewController {
        thirdviewcontroller.totalPAR = self.totalPAR
        thirdviewcontroller.plusminusPAR = self.plusminusPAR
        thirdviewcontroller.currentPAR = self.currentPAR
    }
}

Now if in both view controllers you call refreshLabels on viewDidLoad the values are successfully transferred.




回答2:


Simply make the variable in ThirdViewController and assign the value in prepare for segua and setup value to the label in viewDidLoad:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let thirdviewcontroller = segue.destination as! ThirdViewController
    thirdviewcontroller.totalPAR5 = self.totalPAR
}

class ThirdViewController: UIViewController {
  var totalPAR5 = 0
  override func viewDidLoad() {
      super.viewDidLoad()
      self.totalPar.text = "\(totalPAR5+1)" //You can calculate here like +1 or -1
      // Do any additional setup after loading the view.
  }
}


来源:https://stackoverflow.com/questions/46790127/how-to-transfer-label-data-to-new-controller-label-after-label-number-is-set-wit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!