Как перейти между несколькими встроенными UINavigationControllers?

В настоящее время я работаю над приложением, которое переходит следующим образом:

Контроллер вида таблицы (встроенный в навигационный контроллер) —>
Контроллер панели вкладок —>
1 из 4 контроллеров вида (каждый встроенный в свой собственный навигационный контроллер)

После перехода на 1 из 4 встроенных контроллеров вида, я хочу, чтобы «новый» навигационный контроллер взял на себя, сохраняя при этом стек предыдущих переходов (так, чтобы пользователь мог легко вернуться). К сожалению, так обстоят дела, оригинальная навигация, кажется, покрывает недавно созданную навигацию (название которой можно слабо увидеть за барной стойкой вверху).

Я бы хотел избежать программных подходов, где это возможно, так как я предпочитаю «раскадровку.»

Кстати: я разрабатываю Swift в Xcode 6.2

Спасибо.

1 ответ

  1. Обновите код и проект, изучите Swift 3 и изучите программные изменения. Если у вас есть желание быть качественным разработчиком iOS, то обучение принятию изменений-это огромный шаг к вашему собственному успеху. Добавление навигационного контроллера в код до смешного просто. Заставляя все быть сделано через раскадровку только сужает себя. Я использовал этот учебник, чтобы помочь мне начать с изучения того, как обрабатывать материал в коде. https://www.raywenderlich.com/78568/create-slide-out-navigation-panel-swift

    Используйте это для создания экземпляра NavigationController, чтобы убедиться, что у вас есть тот же идентификатор восстановления для навигационного контроллера здесь, как и в раскадровке, и что там, где я говорю «Main», у него есть имя раскадровки, где существует навигационный контроллер.

    private extension UIStoryboard {
        class func mainStoryboard() -> UIStoryboard {
            return UIStoryboard(name: "Main", bundle: Bundle.main)
        }
        class func someNavigationController() -> UINavigationController? {
            return mainStoryboard().instantiateViewController(withIdentifier: "SomeNavigationController") as? UINavigationController
        }
    }
    

    как переменная класса make:

    var someNavigationController: UINavigationController!
    var someViewController: UIViewController!
    

    внутри функции, где вы хотите отобразить навигационный контроллер так это:

    someNavigationController = UIStoryboard.someNavigationController()!
    someViewController = someNavigationController.childViewControllers.first! as! EiValueTableViewController
    someNavigationController.view.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height)
    view.addSubview(someNavigationController.view)
    addChildViewController(someNavigationController)
    someNavigationController.didMove(toParentViewController: self)
    

    У меня есть много контроллеров просмотра, с которыми я делаю такие вещи. Они полностью сделаны в раскадровке по-прежнему, но это позволяет использовать их так, как вы хотите, вместо того, чтобы быть вынужденным только переход с сегментами. Если вы все еще отказываетесь делать вещи программно, то вы можете перейти к SplitViewController, для которого должно быть просто найти руководства, но я считаю, что они далеки от сужения для такого рода использования.