Swift + Storyboards:如何保持对segue控制器的强烈参考?

时间:2016-07-24 21:30:48

标签: ios swift

我有两个控制器:

  1. HistoryViewController,它有一个“浏览”按钮。它嵌入在NavigationController
  2. WebBrowserViewController,将通过HistoryViewController的浏览按钮
  3. 进行访问

    浏览按钮很好用。当我点击它时,它会将我带到Web浏览器视图故事板。

    enter image description here

    然而,当我按下并再次点击“浏览”按钮时,它总是会创建一个新的Web浏览器视图。因此,如果我在网页浏览器视图中的某个页面上并返回历史记录视图,然后再次点击“浏览”,我将返回主页并丢失当前页面。

    有没有办法保持对WebBrowserViewController的强引用,以便只有初始点击“浏览”按钮才能创建Web浏览器,所有以下点击只显示一个?

    我正在使用故事板。

2 个答案:

答案 0 :(得分:3)

Segues总是创建一个新的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)
}

为了实现此目的,您必须在 Identity Inspector 中将 Storyboard Identifier 设置为"webBrowserViewController"

答案 1 :(得分:2)

  

有没有办法保持对WebBrowserViewController的强引用

这不是正确的做法。相反,请保留对配置信息的强引用,以便在返回时重新创建 Web浏览器视图控制器的状态。

(例如,您可以保存请求URL甚至Web视图的滚动偏移。)