2015-11-26 4 views
2

У меня есть кнопка в моем SettingsViewController, которая при нажатии, я хочу представить тот же экземпляр моего TimerViewController каждый раз, когда нажимается кнопка.Swift: Как вернуться к тому же экземпляру моего UIViewController

[This is what it looks like]

Я думаю, что я получил довольно близко с этим постом здесь, iOS Swift, returning to the same instance of a view controller. Поэтому, если вы можете указать мне на сохранение экземпляра TimerViewController, это будет работать лучше всего.

Это код, я прямо сейчас -

var yourVariable : UIViewController! 

if yourVariable == nil { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    yourVariable = storyboard.instantiateViewControllerWithIdentifier("timer") as! TimerInterface 
     } 
presentViewController(yourVariable, animated: true, completion: nil) 
+1

В чем проблема с кодом? –

+0

Мне нужен способ вернуться к тому же экземпляру 'TimerViewController'. У меня есть хороший способ создания экземпляра, но я не знаю, как вернуться к тому же экземпляру. –

+0

Ваш код должен работать. – Tim

ответ

4

код, который вы предоставили, должен работать. если ваш SettingsViewController получает освобождение, хотя timerViewController также освобождается и воссоздается при следующем его представлении. поэтому вы должны убедиться, что сохраните его экземпляр в соответствующем месте.

var timerViewController: TimerViewController! 

if timerViewController == nil { 
    let timerViewController = UIStoryboard(name: "Main", bundle: nil) 
    yourVariable = storyboard.instantiateViewControllerWithIdentifier("timer") as! TimerInterface 
} 

presentViewController(timerViewController, animated: true, completion: nil) 
+0

Большое спасибо! Я отклонил TimerViewController, который исправил проблему, когда я создавал новый экземпляр SettingsViewController. Создан экземпляр, но он снова запускался из-за создания нового созданного элемента SettingsViewController. –

+0

добро пожаловать, приятель! –

0

Лучше всего было бы сохранить ViewController где-то, и вернуться к нему. Путь «вернуться к нему»: добавить

var tvc: TimerViewController? = nil 

внутри AppDelegate , когда вы получите ваш таймер (лучше всего будет, если вы оставили его в viewDidDisappear)

добавить:

(UIApplication.sharedAplication().delegate as! AppDelegate).tvc = self 

тогда, когда вы получаете настройки, если вы хотите, чтобы непосредственно перейти обратно к таймеру

let tvc = (UIApplication.sharedAplication().delegate as! AppDelegate).tvc 
(UIApplication.sharedApplication().delegate? as! AppDelegate).window?.rootViewController?.presentViewController(tvc, animated: true , completion: nil) 

Если вы спросите себя, почему вы должны представить его с помощью rootViewController (последняя строка), это потому, что вы можете представить уже активный viewController, это не будет представлять собой уже действующий vc.

+0

Спасибо за ответ, мне удалось заставить его работать с принятым ответом. Надеюсь, это поможет другим, если они столкнутся с этой проблемой! –