Объедините последовательности с UINavigationController

Я создаю мобильное приложение, которое отображает статистику из нескольких API. Приложение показывает разные значения в зависимости от активного API. Во время выполнения пользователь может выбрать, для какого API отображать значения. Однако значения всегда отображаются в одном и том же целевом контроллере представления.

UINavigationController используется, и я хотел бы отложить его для навигации и пользовательского интерфейса навигации, если это возможно, даже несмотря на то, что UITableViewControllers поддерживает панели навигации.

См. изображение дизайна раскадровки в конце вопроса.

Среда: iOS 9/Swift 2.2/XCode 7

  1. Во время выполнения пользователь выберет контроллер представления Choice из контроллера Select. Как правильно перейти от одного из контроллеров представления выбора через UIBarButton "Готово" к целевому контроллеру? Целевой контроллер не меняется.

  2. Должен ли я программно определять кнопку правой панели как «Готово» для каждого контроллера, встроенного в UINavigationController?

     class UIViewController: UITableViewController {
         override func viewWillAppear( animated: Bool) {
              super.viewWillAppear( animated)
              self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.Plain, target: self, action: nil)
         }
    }
    

Макет раскадровки


person Alex    schedule 29.09.2016    source источник


Ответы (1)


Правильный способ вернуться к корневому контроллеру представления:

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(MyViewController.done))    
    }


    func done() {
        if let navigationController = self.navigationController {
            navigationController.popToRootViewController(animated: true)
        }
    }
}

Вам нужно программно добавить кнопку «Готово»; но это более просто, чем это. Просто выберите контроллер корневого представления и скопируйте/вставьте класс в раскадровке. Используйте свои переходы, чтобы поместить правильное представление в стек UINavigation.

person NonCreature0714    schedule 29.09.2016
comment
На самом деле хочу перейти от контроллера выбора к целевому контроллеру. Лучший вариант: self.navigationController.pushViewController(targetViewController). У этого есть обратная сторона программного определения перехода контроллера представления. - person Alex; 30.09.2016
comment
Если вы хотите сохранить его в стеке навигации, поместите его в стек. В противном случае это просто вопрос использования перехода, и у вас есть несколько вариантов реализации переходов, включая отсутствие кода, если вы предпочитаете. Кроме того, выполнение этого программно, на мой взгляд, не является «недостатком». Это просто другой способ сделать то же самое. - person NonCreature0714; 30.09.2016