Запрет на создание нескольких экземпляров из одного типа ViewController (ARC) - PullRequest
0 голосов
/ 02 мая 2018

Я работаю с 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 (ами): enter image description here

Как мне перейти от 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()
}

Надеюсь, вы понимаете мою проблему. Ищете хорошее решение. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...