我有两个控制器:
浏览按钮很好用。当我点击它时,它会将我带到Web浏览器视图故事板。
然而,当我按下并再次点击“浏览”按钮时,它总是会创建一个新的Web浏览器视图。因此,如果我在网页浏览器视图中的某个页面上并返回历史记录视图,然后再次点击“浏览”,我将返回主页并丢失当前页面。
有没有办法保持对WebBrowserViewController的强引用,以便只有初始点击“浏览”按钮才能创建Web浏览器,所有以下点击只显示一个?
我正在使用故事板。
答案 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视图的滚动偏移。)