web-dev-qa-db-ja.com

ストーリーボードでNavigation Controllerを使用してView Controllerを提示する-Swift

現在、以下の新しいストーリーボードでviewControllerを表示しています。

var storyboard : UIStoryboard = UIStoryboard(name: AccountStoryboard, bundle: nil)
var vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"        
self.presentViewController(vc, animated: true, completion: nil)

ただし、これにより、組み込みのNavigation ControllerなしでViewControllerが表示されます。 「WelcomeID」をストーリーボード内のナビゲーションコントローラーに変更しようとしましたが、成功しませんでした。

私はこれをObjective -Cで動作させましたが、Swiftに変換する方法がわかりません:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"SetupStoryboard" bundle:nil];
UINavigationController *navigationController1 = [storyboard instantiateInitialViewController];
navigationController1.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController1.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

WelcomeViewController *vc = (WelcomeViewController *)navigationController1.viewControllers[0];
vc.teststring = @"Hello";

[self presentViewController:navigationController1 animated:YES completion:nil];

どうすれば迅速にこれを行うことができますか?

42
Ryan

あなたは間違いなく正しい軌道に乗っています。残念ながら、ストーリーボードIDでView Controllerを参照すると、何かに埋め込まれているという事実は無視されます。組み込みの何かにセグエする場合も同じことが当てはまります。目的のView Controllerは、通常は関心のあるコントローラではなく、埋め込みコントローラになります。 Objective-C。したがって、これは単なる構文移植の演習です。

編集:文字列でストーリーボード名を定義する

let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
let vc : WelcomeViewController = storyboard.instantiateViewControllerWithIdentifier("WelcomeID") as WelcomeViewController
vc.teststring = "hello"        

let navigationController = UINavigationController(rootViewController: vc)

self.presentViewController(navigationController, animated: true, completion: nil)

または、埋め込みView ControllerにIDを付与し、代わりにインスタンス化することができます。

97
Chris Wagner
 let secondViewController = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeID") as SecondViewController

        self.navigationController?.pushViewController(secondViewController, animated: true)

クラス名はSecondCiewControllerです

Identifier Name

18
abdul sathar

@Chrisの回答は、Swiftの古いバージョンでうまく機能します。

Swift 3およびSwift 4を更新

   let storyboard : UIStoryboard = UIStoryboard(name: "AccountStoryboard", bundle: nil)
   let vc : WelcomeViewController = storyboard.instantiateViewController(withIdentifier: "WelcomeID") as! WelcomeViewController
   vc.teststring = "hello"

   let navigationController = UINavigationController(rootViewController: vc)

   self.present(navigationController, animated: true, completion: nil)

ありがとう!!!

10
Harjot Singh
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SalesVC") as! SalesVC

navigationController?.pushViewController(vc, animated: true)
0
Aditya A.Rajan