如何在Segue的viewWillAppea中划分案例?

时间:2019-03-02 05:43:28

标签: ios swift segue appdelegate viewwillappear

目的

我正在制作App,以通过Scene kit查看3D模型。
雨燕4.0
Xcode 10.1

我要转移图像。我在SCNViewController中创建了一个图像(使用SCN View),然后将其移至ViewController。 我想在转移图像时区分大小写。 我认为使用Segue更好。

enter image description here 细节 enter image description here

数组
我在AppDelegate中使用数组。因为我想在ViewController中添加和添加图像。当我移到其他ViewController时,我不希望擦除图像。

问题

当我像下面这样写时,它会崩溃。我使用func viewWillAppear。

ViewController

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if appDelegate.isNewSCNStampAdded == true{
             let scnstamp = appDelegate.scnstampArray.last!

             func returnToTop(segue: UIStoryboardSegue) {
                 if segue.identifier == "backtoFirstcoma" {
                 mainImageView.image = scnstamp
                 mainImageView.contentMode = UIView.ContentMode.scaleAspectFit
                 print("1")
             }else if segue.identifier == "backtoSecondcoma" {
                 print("2")
             }else if segue.identifier == "backtoThirdcoma" {
                 print("3")
             }else {
                 print("others")
             }
        }
        appDelegate.isNewSCNStampAdded = false
    }
}

(第二个想法)
我尝试了另一种方式。我做了一个“除法”来区分。但是这种方式也是行不通的。在viewWillAppear的计时中,我无法捕捉到“ dividegoes”的信息。

ViewController

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        if appDelegate.isNewSCNStampAdded == true{
             let scnstamp = appDelegate.scnstampArray.last!

             switch dividegoes {
             case "goone" :
                 mainImageView.image = scnstamp
                 print("1")
             case "gotwo" :
                 secondImageView.image = scnstamp
                 print("2")
             case "gothree" :
                 thirdImageView.image = scnstamp
                 print("3")
             default:
                 print("Others")
             }
        }
        appDelegate.isNewSCNStampAdded = false
    }
}

SCNViewController

let dividegoes = "gozero"

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    switch segue.identifier {
    case "backtoFirstcoma" :
        let whiteVc = segue.destination as! ViewController
        whiteVc.dividegoes = "goone"
        print("go1")
    case "backtoSecondcoma" :
        let blueVc = segue.destination as! ViewController
        blueVc.dividegoes = "gotwo"
        print("go2")
    case "backtoThirdcoma" :
        let greenVc = segue.destination as! ViewController
        greenVc.dividegoes = "gothree"
        print("go3")
    default:
        print(“Others")
    }
}

在这种情况下,如何区分大小写。
如果我删除“ if-else”结构,则说明该结构成功运行。但是我需要以3种方式进行划分。

错误消息
其视图不在窗口层次结构中!

我的想法

我无法在viewWillAppear中使用Segue ...? 也许我需要使用其他方式来区分大小写...

1 个答案:

答案 0 :(得分:0)

override func prepare(for segue: UIStoryboardSegue, sender: Any?)

您应该考虑使用此功能,而不要使用viewWillAppear伴侣。