首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多视图控制器之间的数据共享(Swift 3)

多视图控制器之间的数据共享(Swift 3)
EN

Stack Overflow用户
提问于 2017-07-31 04:23:34
回答 2查看 1K关注 0票数 1

我正在做一个QR代码扫描器问答应用程序,用户必须从做10个问题中得到10分的分数。在用户获得第一个qn后,分数将加1,并将其还原回qr扫描器页面,在该页面中,他们必须扫描下一个qn的QR代码。问题是分数数据的传递。有什么办法可以不让你这样做吗?

这是我的qn1controller

代码语言:javascript
复制
import UIKit

class Quiz1Controller: UIViewController {

    @IBOutlet var question: UILabel!
    @IBOutlet var button1: UIButton!
    @IBOutlet var button2: UIButton!
    @IBOutlet var button3: UIButton!
    @IBOutlet var button4: UIButton!
    @IBOutlet var LabelEnd: UILabel!
    @IBOutlet var scorelabel: UILabel!
    var score = Int()
    var CorrectAnswer = String()

    override func viewDidLoad() {
        super.viewDidLoad()

        RandomQuestions()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func RandomQuestions(){

        var RandomNumber = arc4random() % 1
        RandomNumber += 1

        switch(RandomNumber){
        case 1:
            question.text = "Who is the current Deputy Chairman of People's Association?"
            button1.setTitle("Lee Hsien Loong", for: .normal)
            button2.setTitle("Chan Chun Sing", for: .normal)
            button3.setTitle("Goh Chok Tong", for: .normal)
            button4.setTitle("Goh Khen Swee", for: .normal)
            CorrectAnswer = "2"
            Hide()
            break
        default:
            break
        }
    }

    func Hide(){
        LabelEnd.isHidden = true
    }
    func UnHide(){
        LabelEnd.isHidden = false
    }

    @IBAction func Button1(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "1"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button2(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "2"){
            score = score + 1
            scorelabel.text = "Score:\(score)"
            self.performSegue(withIdentifier: "correct", sender: self)            
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button3(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "3"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button4(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "4"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

}

这是我的qn2控制器

代码语言:javascript
复制
import UIKit

class Quiz2Controller: UIViewController {

    @IBOutlet var question: UILabel!
    @IBOutlet var button1: UIButton!
    @IBOutlet var button2: UIButton!
    @IBOutlet var button3: UIButton!
    @IBOutlet var button4: UIButton!
    @IBOutlet var LabelEnd: UILabel!
    @IBOutlet var scorelabel: UILabel!
    var score = Int()
    var CorrectAnswer = String()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        RandomQuestions()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }

    func RandomQuestions(){

        var RandomNumber = arc4random() % 1
        RandomNumber += 1

        switch(RandomNumber){
        case 1:
            question.text = "Who is the founder of People's Association?"
            button1.setTitle("Lee Hsien Loong", for: .normal)
            button2.setTitle("Lee Kuan Yew", for: .normal)
            button3.setTitle("Goh Chok Tong", for: .normal)
            button4.setTitle("Goh Khen Swee", for: .normal)
            CorrectAnswer = "1"
            Hide()
            break
        default:
            break
        }
    }

    func Hide(){
        LabelEnd.isHidden = true
    }
    func UnHide(){
        LabelEnd.isHidden = false
    }

    @IBAction func Button1(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "1"){
            score = score + 1
            scorelabel.text = "Score:\(score)"
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button2(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "2"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button3(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "3"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

    @IBAction func Button4(_ sender: Any) {
        UnHide()

        if (CorrectAnswer == "4"){
            self.performSegue(withIdentifier: "correct", sender: self)
        }
        else {
            LabelEnd.text = "Incorrect Answer! Try again"
        }
    }

}

故事板:

EN

回答 2

Stack Overflow用户

发布于 2017-07-31 05:11:39

删除Seague,如下所示。假设您想要共享NSMutableDictionary

只需将一个变量作为要与viewController共享的类型即可。

为了埃克萨。您希望与ShareViewController共享数据,然后接受如下所示的变量

代码语言:javascript
复制
var Dict_data = NSMutableDictionary()

现在您想导航的地方,就像假设它是您的ShareViewController一样。记住,不要忘记将ShareViewController的标识符输入到StoryBoard中。

代码语言:javascript
复制
    let PV = self.storyboard?.instantiateViewController(withIdentifier: "ShareViewController") as! ShareViewController
    PV.data = dict_share_date 
    self.navigationController?.pushViewController(PV, animated: true)

这里dict_share_data是您的NSMutableDictionry。您可以采取任何类型,但记住,双方的类型必须相同。或者你可以做类型铸造。

票数 0
EN

Stack Overflow用户

发布于 2017-07-31 05:45:32

您可以使用AppDelegate在多个视图控制器之间共享数据。您可以随时保存、更新和检索应用程序的AppDelegate中定义的数据。Here是我以前的ans,要高效地使用它来使用Appdelegate.Do,如果您需要Swift版本,请告诉我。

在AppDelegate中,将变量定义为

代码语言:javascript
复制
class AppDelegate: UIResponder, UIApplicationDelegate {
  var window: UIWindow?
  var points : String? // Declare your object
  .... other methods
}
//You can access the property to save and retrieve your file. You can save 
let app = UIApplication.shared.delegate as! AppDelegate
app.points = "yourString"

 Yo can read properties from any viewcontroller as per your requirement as 

let app = UIApplication.shared.delegate as! AppDelegate
let points = app.points?

您还可以使用NSNotificationCenter在多个视图控件中共享数据。请让我知道,如果您有查询,重新分级,实现相同。

如果您需要在导航时将数据从一个视图控制器传递到另一个视图控制器,您也可以使用故事板id实例化视图控制器,@Jeetendra在他的ans中解释道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45407423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档