Я работаю с UINavigationController
.
Я хочу предотвратить создание нескольких экземпляров одного и того же типа ViewController.
Если у меня есть UINavigationController
с четырьмя детьми ViewController (s) (A, B, C, D) и другой ViewController ( E ), и я перемещаюсь из A -> B -> C -> D
и в D ViewController Я создам экземпляр E ViewController, и я представлю его .. и из E ViewController я перейду к A ViewController у меня будет 2 экземпляра из A ViewController .. и я хочу предотвратить это.
Вот раскадровка со всеми ViewController (ами):
Как мне перейти от D к E :
let vc = self.storyboard?.instantiateViewController(withIdentifier: "E") as? E
self.present(vc!, animated: true)
Как мне перейти от E к A :
self.performSegue(withIdentifier: "aSegue", sender: nil)
Я нашел несколько решений:
1) Когда я нахожусь в E ViewController должен уничтожить все ViewController (s) ( A, B, C, D )
2) При переходе от E к A .. проверить, существует ли A ViewController .., если он существует, установить как rootViewController
, иначе создать это и представить это:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
var aVC: AViewController?
if let viewControllers = appDelegate.window?.rootViewController?.childViewControllers {
for vc in viewControllers {
print(vc.debugDescription)
if vc.isKind(of: AViewController.self) {
aVC = vc as! AViewController
break
}
}
}
if let vc = aVC {
let navigation = UINavigationController(rootViewController: vc)
AppDelegate.delegate().setRootViewController(view: navigation)
} else {
let vc = self.storyboard?.instantiateViewController(withIdentifier: "AViewController") as? AViewController
self.present(vc!, animated: true)
}
3) Создайте одноэлементный менеджер для каждого ViewController (пример: ссылка )
class AManager {
static let sharedInstance = AManager()
}
Надеюсь, вы понимаете мою проблему.
Ищете хорошее решение.
Заранее спасибо.