簡體   English   中英

不同的viewcontroller segue

[英]different viewcontroller segue

我希望我的應用程序可以從ViewControll A到b,以及b到c(a,b,c是獨立的viewcontroller)“自動”選擇,所以我做到了:

  1. 在A_ViewController定義了一個計時器,可以每隔一分鍾從A到B到C進行切換。

  2. 在StoryController上為ViewController A和B設置segue:

    A_ViewController:“ goToB”和“ goToC”

    B_ViewController:'goToC'

  3. 並在A_ViewController中覆蓋“覆蓋func prepare(for segue:.....)”。

碼:

class A_ViewController:  ViewController {

    ...//in Timer
       //first 1 minute
       performSegueWithIdentifier("goToB", sender: self)
       //second minute
       B_Controller(). goToC()
    ...

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "goToB" {
            let B_Controller = segue.destination as! B_ViewController
            B_ViewController.msg = "From AtoB"
        }
        if segue.identifier == "goToSearchLocation" {
            let C_ViewController = segue.destination as! C_ViewController
            C_ViewController.msg = searchWord
            }
    }

class B_Controller:  ViewController {
    ...
    func goToC() {
       performSegueWithIdentifier("goToC", sender: self)
    }
}

運行APP后,可以先執行segue(成功顯示ViewController B),但是此后,它始終顯示錯誤消息,如下所示:

由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'Receiver()沒有標識為'goToC'的segue

但是我真的在storyBoard上設置了一個segue“ goToC”。 我不知道如何解決。 該代碼已經由Google搜索修改。

當您說B_Controller().goToC()您正在創建B_Controller新實例 ,而不是指goToB segue創建的現有實例。 此外,由於不是從情節B_Controller中創建新的B_Controller實例,因此它對segues一無所知。

您需要存儲對要在屬性中顯示的B_Controller實例的引用。 然后,您可以使用該屬性來調用goToC函數。

class A_ViewController:  ViewController {

    var bController: B_Controller?

    ...//in Timer
       //first 1 minute
       performSegueWithIdentifier("goToB", sender: self)
       //second minute
       self.bController?.goToC()
    ...

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "goToB" {
            self.bController = segue.destination as! B_ViewController
            self.bController.msg = "From AtoB"
        }
        if segue.identifier == "goToSearchLocation" {
            let C_ViewController = segue.destination as! C_ViewController
            C_ViewController.msg = searchWord
            }
    }

class B_Controller:  ViewController {
    ...
    func goToC() {
       performSegueWithIdentifier("goToC", sender: self)
    }
}

您可能需要重新設計代碼; 在B中使用一個新的計時器呈現C可能比在A中使用單個計時器要干凈得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM