将 Seques 与 UINavigationController 相结合

Combine Seques with UINavigationController

我正在构建一个显示来自多个 API 的统计信息的移动应用程序。 该应用程序根据处于活动状态的 API 显示不同的值。在运行时,用户可以 select 显示哪个 API 的值。但是,这些值始终显示在同一个 Target 视图控制器中。

UINavigationController 正在使用中,即使 UITableViewControllers 支持导航栏,我也希望尽可能将其用于导航和导航 UI。

请看问题末尾的故事板设计图

环境: iOS 9/Swift 2.2/XCode 7

  1. 在运行时,用户将从 Select 控制器中 select 选择视图控制器。 通过 "Done" UIBarButton 从其中一个 Choice 视图控制器转至目标控制器 的合适方法是什么? Target 控制器不变。

  2. 我必须以编程方式为 "Done" 为嵌入 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)
         }
    }
    

return 到根视图控制器的正确方法是:

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)
        }
    }
}

您确实需要以编程方式添加 "done" 按钮;但它比那更简单。只是 select 你的根视图控制器,以及 copy/past 情节提要中的 class。使用您的 segues 将正确的视图推送到 UINavigation 堆栈。