2016-09-29 60 views
0

我正在構建一個顯示來自多個API的統計信息的移動應用程序。 該應用程序根據活動的API顯示不同的值。在運行時,用戶可以選擇要顯示其值的API。但是,這些值始終顯示在同一個目標視圖控制器中。將Seques與UINavigationController結合

UINavigationController正在使用,我想推遲導航和導航UI,如果可能的話,即使UITableViewControllers支持導航欄。

請在問題結尾處查看故事板設計圖片。

環境:的iOS 9 /夫特2.2/7的XCode

  1. 在運行時,用戶將選擇從選擇控制器選擇視圖控制器。 通過「完成」UIBarButton從選擇視圖控制器中的一個繼續到目標控制器的適當方式是什麼?目標控制器不會更改。

  2. 我是否必須以編程方式爲嵌入UINavigationController中的每個控制器定義正確的bar按鈕以「完成」?

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

Storyboard Layout

回答

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堆棧。

+0

其實想要從Choice控制器轉到目標控制器。是最好的選擇:self.navigationController.pushViewController(targetViewController)。這具有以編程方式定義視圖控制器轉換的缺點。 – Alex

+1

如果要將其保留爲導航堆棧的一部分,可以將其推入堆棧。否則,這只是一個使用segue的問題,並且您有幾個實現segse的選項,如果您願意,也可以不使用代碼。另外,在我看來,以編程方式進行並不是一個「缺點」。這是做同樣事情的另一種方式。 – NonCreature0714