簡體   English   中英

迅速,選擇從標簽欄控制器中拆分視圖控制器

[英]Swift, segue to split View Controller from Tab Bar Controller

我想通過說我是Swift和IOS開發的新手來對此進行開頭。

我目前正在嘗試從選項卡欄視圖返回到作為拆分視圖控制器的根視圖控制器執行segue。 在此處輸入圖片說明

從下面的圖片中,我想選擇“取消”按鈕,並返回到我的根視圖控制器(已拆分) 在此處輸入圖片說明 視圖控制器

下面是我設置的情節提要劇集

在此處輸入圖片說明

下面是我正在使用的代碼。

@IBAction func cancelButton(_ sender: Any) {
    performSegue(withIdentifier: "submit", sender: nil)

}

最初啟動我的應用程序並開始使用它時。 一切正常。 如下所示,當從左側選擇一個項目時,正確的數據將填充在詳細視圖中。

在此處輸入圖片說明

初次打開時,即使側面推動菜單也可以正常工作,如下所示。 在此處輸入圖片說明

但是,這是當我在側面菜單中選擇“提交郵件”選項並嘗試返回到rootview時,該應用開始崩潰。

如下所示,當我使用segue返回時,在從主視圖中選擇一個項目時,不再在詳細視圖中填充數據。

在此處輸入圖片說明

此外,當打開時,側面推送菜單現在全屏顯示。

在此處輸入圖片說明

為什么會這樣呢? 還要注意一點,我在側面推動菜單中使用了Cocoapod SideMenu。

謝謝!

Segues用於將控制器推入導航層次結構,而不是像您嘗試的那樣向后退。 您應該將導航層次結構視為樹形結構,其中控制器之間幾乎沒有任何循環關系。 您可以從層次結構中添加和刪除控制器,以進行“前進”和“后退”。 在您的方案中實際發生的情況是,將根控制器的新實例推送到導航堆棧上,而該實例尚未以原始根控制器具有的狀態進行初始化。 盡管可以使用一種特殊類型的segue(稱為unwind segues)來“后退”,但我不建議這樣做,因為它們連接起來很復雜,並且編寫的代碼不明確其功能。

相反,您可以將UIViewController.dismiss與委托模式結合使用以實現所需的功能。

要從tabBarController返回,我只需要設置一個展開鍵即可:

在根視圖控制器中聲明展開(在func中不需要代碼)

@IBAction func unwindToRootViewController(_ sender: UIStoryboardSegue) {
    // You can print("I returned"), just to test
}

將將觸發返回的按鈕連接到tabBarController的退出按鈕,然后選擇unwindToRootViewController

暫無
暫無

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

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