ios - 在没有 segue 的情况下在多个 View Controller 之间共享数据(Swift 3)

标签 ios swift xcode uinavigationcontroller

我正在开发一个 QR 码扫描仪测验应用程序,用户必须在完成 10 个问题后获得 10 分。在用户第一个 qn 之后,分数将加 1,并将他们返回到 qr 扫描仪页面,他们必须在该页面扫描下一个 qn 的 QR 码。问题是分数数据的传递。有没有办法不用 segue 就可以做到?

这是我的qn1controller

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 Controller

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"
        }
    }

}

Storyboard:

enter image description here

最佳答案

删除 Seague 并按如下方式进行操作。假设您要共享 NSMutableDictionary

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

对于Exa。你想与 ShareViewController 共享数据,然后取一个像

这样的变量
var Dict_data = NSMutableDictionary()

现在您想要导航到哪里,就像假设这是您的 ShareViewController 一样。请记住不要忘记将 ShareViewController 的标识符提供给 StoryBoard。

    let PV = self.storyboard?.instantiateViewController(withIdentifier: "ShareViewController") as! ShareViewController
    PV.data = dict_share_date 
    self.navigationController?.pushViewController(PV, animated: true)

这里的 dict_share_data 是你的 NSMutableDictionry。您可以采用任何类型,但请记住两侧类型必须相同。或者您可以进行类型转换。

关于ios - 在没有 segue 的情况下在多个 View Controller 之间共享数据(Swift 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45407423/

相关文章:

iphone - 使用将网络用于 iphone 应用程序 objective-c 的 c/c++ 库

ios - 如何快速查找自定义对象数组中某个键的所有对象的总和

ios - Swift:如何以编程方式禁用 MapKit 注释的信息按钮

ios - 核心蓝牙充当信标

ios - Xcode 7.1上传App报错

swift - didFinishPickingMediaWithInfo 函数进入无限循环

java - .setItemChecked 等价于 swift

iphone - 如何使用 CAEAGLLayer 淡入淡出 View

ios - 核心动画奇怪显示后 addSubview 然后 removeFromSuperview

ios - 在 MKMapView 上设置多个引脚,并让 Callout View 显示正确的信息?