2016-07-24 4 views
3

У меня есть два контроллера:Swift + Раскадранты: Как сохранить сильную ссылку на демонстрационный контроллер segue?

  1. HistoryViewController, который имеет кнопку "Обзор". Это встроено внутри NavigationController
  2. WebBrowserViewController, которые будут доступны через кнопку обзора от HistoryViewController

Кнопка просмотра является зацепили штрафа. Когда я нажимаю на него, он выводит меня в раскадровку просмотра веб-браузера.

enter image description here

Однако, он всегда делает новый вид веб-браузера, когда я нажимаю назад и нажмите на кнопку «Обзор» снова. Поэтому, если я нахожусь на определенной странице в представлении веб-браузера, и я возвращаюсь к просмотру истории, а затем снова нажмите «Обзор», я всегда возвращаюсь на домашнюю страницу и теряю текущую страницу.

Есть ли способ сохранить сильную ссылку на WebBrowserViewController, так что только начальное нажатие кнопки «Обзор» создаст веб-браузер, и все последующие краны просто покажут это?

Я использую раскадровки.

ответ

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 запроса и даже прокрутки смещение веб-просмотра.)

+0

Есть ли более простой способ без явного хранения состояния? я бы предпочел просто представить тот же контроллер вида или что-то. – Edmund

+0

Ну, вы можете использовать контроллер панели вкладок вместо Show segue ... Контроллер панели вкладок держит несколько контроллеров представлений под рукой в ​​качестве братьев и сестер. Или вы даже можете создать свою собственную архитектуру контроллера. Но если вы собираетесь использовать Show segue, вы не должны представлять «тот же контроллер представления»; позволяя контроллеру просмотра умереть, когда вы его покидаете, и создавая новый экземпляр при повторном показе, является целым _point_ этого аспекта архитектуры контроллера представления. – matt

+0

Хранение состояния * это * более простой способ. –

Смежные вопросы