2016-07-24 26 views
3

我有兩個控制器:Swift + Storyboards:如何保持顯示segue控制器的強大參考?

  1. HistoryViewController,其中有一個 「瀏覽」 按鈕。這被嵌入NavigationController
  2. WebBrowserViewController,這將通過瀏覽按鈕從HistoryViewController

瀏覽按鈕是掛接細訪問內部。當我點擊它時,它會將我帶到Web瀏覽器視圖故事板。

enter image description here

然而,它總是讓一個新的Web瀏覽器視圖當我按下返回並再次點擊「瀏覽」按鈕。因此,如果我在Web瀏覽器視圖中的特定頁面上,然後回到歷史記錄視圖,然後再次點擊「瀏覽」,我總是會返回主頁並丟失當前頁面。

有沒有辦法保持對WebBrowserViewController的強引用,以便只有初始點擊「瀏覽」按鈕才能創建Web瀏覽器,並且所有後續的點擊都會顯示該瀏覽器?

我正在使用故事板。

回答

3

塞格斯總是創建一個新的viewController。如果您想要重複回到相同的WebBrowserViewController,那麼您應該手動實例化該視圖控制器,在您的HistoryViewController中保留對該視圖控制器的強烈引用,然後推送或呈現該viewController而不是使用segue。

var webBrowserVC: WebBrowserViewController? 

@IBAction func browseButtonPressed() { 
    if webBrowserVC == nil { 
     webBrowserVC = storyboard?.instantiateViewControllerWithIdentifier("webBrowserViewController") as? WebBrowserViewController 
    } 

    // configure webBrowserVC with data that would have previously been set 
    // in prepareForSegue: 
    webBrowserVC?.someProperty = someData 

    // push view controller if you are using a navigation controller: 
    navigationController?.pushViewController(webBrowserVC!, animated: true) 

    // or to present modally: 
    presentViewController(webBrowserVC!, animated: true, completion: nil) 
} 

爲了這個工作,你必須將故事板標識符設置爲"webBrowserViewController"身份檢查

2

有沒有辦法讓一個強大的參考WebBrowserViewController

這不會是正確的事情。相反,請保留對配置信息的強烈參考,以便在您返回時瀏覽器視圖控制器的狀態爲重新創建

(例如,可以保存請求的URL,甚至滾動Web視圖的偏移量。)

+0

有沒有明確存儲狀態更簡單的方法?我寧願只展示相同的視圖控制器或東西 – Edmund

+0

好吧,你可以使用標籤欄控制器而不是顯示segue ...標籤欄控制器保持多個視圖控制器作爲兄弟。或者你甚至可以建立自己的視圖控制器體系結構。但是如果你打算使用Show segue,你不應該出現「相同的視圖控制器」。讓視圖控制器在你離開它時死掉,並且當你再次顯示時實例化一個新視圖控制器,這是視圖控制器體系結構這個方面的整個_point_。 – matt

+0

存儲狀態*是更簡單的方法。 –