2016-05-18 4 views
1

私のストーリーボードに4つのViewControllerがあります。私はそれらのすべてがperformSegueによって私の "設定" ViewControllerにアクセスできるようにしたい。 これを実行するには、Ctrl +各ViewControllerから「Settings」ViewControllerにドラッグするのではなく、これを実行することが可能ですか?すべてを統治する1つのセグメント

+0

segueを使用する場合は、各ソースから宛先へのセグが必要です。または、設定ビューコントローラをインスタンス化し、セグを使用せずにプッシュ/プレゼンテーションすることができます – Paulw11

+0

この回答を恐れていました。私が4つのコントローラすべてから同じものにセグをドラッグしなければならないという事実は道のりが醜いですが、もし私がしなければならない場合は、 –

答えて

3

単一のセグでは不可能です。 4種類の異なる4種類のセグが必要です。ViewControllersしかし、これはプログラム的に行うことができます。

今、あなたは(このビューコントローラがナビゲーションコントローラを持っていることを確認してください)あなたのビューコントローラのいずれかからshowSettingsScreen()を呼び出すことができますUIVIewController

extension UIViewController 
{ 
    func showSettingsScreen() 
    { 
     let storyBoard = UIStoryboard(name: "YourStoryBoardName", bundle:nil) 
     let settingsScreen = storyBoard.instantiateViewControllerWithIdentifier("YourSettingsViewControllerID") 
     self.navigationController?.pushViewController(settingsScreen, animated: true) 
    } 
} 

の拡張子を確認します。

+0

実際には動作するかもしれません。私はそれをコンピュータ上で一度行ってみましょう。 –

0

私は本当にそうは思わないので、そうする方法があります。 Uは、あなたの4ビューコントローラのすべてにウルSettingsViewControllerを接続セグエを追加し、

prepareForSegue:sender: 
or 
shouldPerformSegueWithIdentifier:sender: 

方法で使用されているセグエの識別子を定義するべきです。 Uはこれらの識別子を通じてセグをアクセスすることができます。あなたが "Ctrl +各ViewControllerから" Settings "ViewController"にドラッグすると、Navigation Controllerも選択できます。あなたのストーリーボードにNavigation Controllerを埋め込み、すべてのView ControllerにストーリーボードIDを定義するだけで完了です。インスタンス化するにはView ControllerのストーリーボードIDを使用してください。

ストーリーボードIDを割り当てる以外にも、ストーリーボードについては心配する必要はありません。Ctrl +ドラッグする必要はありません。

私は、もう1つエレガントなソリューション、つまりコンテナビューを使用すると考えました。 Container View Controllerでは、すべてのViewControllerを表示しながら、ボタンを押してSettingsViewControllerを共通に切り替えることができます。 幸せなコーディング..

0

あなたはできません。セグには、ソースとデスティネーションがそれぞれ1つしかありません。あなたはプログラム的にあなたの設定ViewControllerをインスタンス化し、プッシュまたはプレゼントを使ってそれを表示することができます。あなたは何を考えなければならないのですが、なぜあなたは非常に多くの場所からセッティングに行く必要がありますか?それは悪いデザインと重複したコードの兆候かもしれません。通常、アプリケーションには、複数の画面から(何らかの種類のコンテナビュー実装を使用して)アクセスできるボタンまたはアクションが1つだけあり、1つの画面からしかアクセスできません。

0

これを行う方法が1つあります。 1つの埋め込みビューを含むルートビューコントローラと一致するビューを作成します。あなたのセグをこのルートコントローラに追加してください。あなたのアプリケーションでは、標準の子コンテナ技術を使って他のView Controllerを切り替えます。これは、UINavigationControllersが使用するコンセプトとほぼ同じです。

これの利点の1つは、すべてのコントローラに共通の要素が表示されるようにしたい場合、それらをルートコントローラに追加できることです。

しかし、それはすべてあなたが達成しようとしているものに依存します。

関連する問題