2016-09-29 3 views
0

私は、複数のAPIから統計情報を表示するモバイルアプリケーションを構築しています。 このアプリは、アクティブなAPIに基づいて異なる値を表示します。実行時に、ユーザーは値を表示するAPIを選択できます。ただし、値は常に同じTarget View Controller内に表示されます。UINavigationControllerでシーケンスを結合する

UINavigationControllerが使用されており、UITableViewControllerがナビゲーションバーをサポートしていても、可能であれば、ナビゲーションとナビゲーションUIのためにそれを延期したいと思います。

質問の最後にあるストーリーボードのデザインイメージをご覧ください。

環境:のiOS 9 /スウィフト2.2/XCodeの実行時には7

  1. 、ユーザーが選択し、コントローラからの選択ビューコントローラを選択します。 "Done" UIBarButtonを介して、Choiceビューコントローラの1つからターゲットコントローラにセグをする適切な方法は何ですか?ターゲットコントローラは変更されません。

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

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

あなたはプログラムで「完了」ボタンを追加する必要があります。それよりも簡単です。ルートビューコントローラーを選択し、ストーリーボードのクラスをコピー/ペーストしてください。あなたのセグを使用して、正しいビューをUINavigationスタックにプッシュします。

+0

実際はChoiceコントローラからターゲットコントローラに移動したいと考えています。 self.navigationController.pushViewController(targetViewController)への最適なオプションです。これには、ビューコントローラの遷移をプログラムで定義することの欠点があります。 – Alex

+1

ナビゲーションスタックの一部にしておきたい場合は、それをスタックにプッシュする方法があります。そうでない場合は、セグを使用するだけの問題です。セグを実装するためのオプションがいくつかあります(必要な場合はコードなし)。また、プログラム的に行うことは、私の意見では「欠点」ではありません。同じことをするのはちょっと違う方法です。 – NonCreature0714

関連する問題