将Seques与UINavigationController

时间:2016-09-29 21:04:40

标签: ios swift uinavigationcontroller segue uinavigationitem

我正在构建一个显示来自多个API的统计信息的移动应用。 该应用根据活动的API显示不同的值。在运行时,用户可以选择显示值的API。但是,值始终显示在同一目标视图控制器中。

UINavigationController正在使用中,如果可能的话,我想推荐用于导航和导航UI,即使UITableViewControllers支持导航栏。

请在问题末尾查看故事板设计图片。

环境: iOS 9 / Swift 2.2 / XCode 7

  1. 在运行时,用户将从Select控制器中选择Choice视图控制器。 通过"完成"从一个选择视图控制器中切换的适当方法是什么? 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)
         }
    }
    
  3. Storyboard Layout

1 个答案:

答案 0 :(得分: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)
        }
    }
}

您需要以编程方式添加“完成”按钮;但它比这更简单。只需选择您的根视图控制器,然后在故事板中复制/通过该类。使用segues将正确的视图推送到UINavigation堆栈。