79

iOS Swift プロジェクトにプログラムで複数のビュー コントローラーがあります。私は絵コンテを持っていないので、できれば避けたいと思っています。別のファイルに切り替えてviewcontroller.swift(これを と呼びますview2.swift)、ボタンが呼び出す関数の一部にする方法はありますか?
私は次のことを試しました:

let storyboard: UIStoryboard = UIStoryboard(name: "myTabBarName", bundle: nil)
let vc: UIViewController = storyboard.instantiateViewControllerWithIdentifier("myVCID") as UIViewController
self.presentViewController(vc, animated: true, completion: nil)

上記はストーリーボードで機能しview2.swiftますが、別のストーリーボードを呼び出したいです。これはできますか?

4

13 に答える 13

126

これを試して:

let vc = ViewController() //change this to your class name
self.presentViewController(vc, animated: true, completion: nil)

Swift3 の場合:

self.present(vc, animated: true, completion: nil)
于 2014-06-07T16:59:29.740 に答える
111

空白/黒い画面が表示される場合、このコードはうまくいきました。

    let vc = self.storyboard?.instantiateViewController(withIdentifier: myVCID) as! myVCName
    self.present(vc, animated: true, completion: nil)

「識別子」を VC に設定するには、ストーリーボードで VC の ID インスペクターに移動します。「ストーリーボード ID」を、識別子にしたいものに設定します。参考までに下の画像を見てください。

于 2014-10-09T19:40:39.643 に答える
19

スイフト 3 とスイフト 4

let vc = self.storyboard?.instantiateViewController(withIdentifier: "idMyViewControllerName") as! MyViewControllerName
self.present(vc, animated: true, completion: nil)
于 2016-12-09T08:54:08.900 に答える
8

私にとっては、2 つの別々のナビゲーション コントローラーに 2 つのビューがありました。上記の組み合わせを使用する必要がありました。

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("WelcomeViewController") as! WelcomeViewController
    var navigationController = UINavigationController(rootViewController: vc)
    self.presentViewController(navigationController, animated: true, completion: nil)

スウィフト 3.x

        let secondVC = self.storyboard?.instantiateViewController(withIdentifier: "VC-ID" as! yourViewController
        let navigationVC = UINavigationController(rootViewController: secondVC)
        self.present(navigationVC, animated: true, completion: nil)
于 2015-12-13T14:49:26.543 に答える
6

Swift 2.1+ の使用

 let vc = self.storyboard?.instantiateViewControllerWithIdentifier("settingsVC") as! SettingsViewController
 self.presentViewController(vc, animated: true, completion: nil)

ここに画像の説明を入力

于 2015-11-03T00:49:24.713 に答える
4

ナビゲーション コントローラーを追加し、2 番目のビュー コントローラーを rootVC として設定することで、黒い画面を解決しました。

let vc = ViewController()       
var navigationController = UINavigationController(rootViewController: vc)
self.presentViewController(navigationController, animated: true, completion: nil
于 2015-03-06T23:56:25.847 に答える
4

これを使用してください: nibName を使用していることを確認してください。そうしないと、xib のプリロードされたビューが表示されません:

var vc : ViewController = ViewController(nibName: "ViewController", bundle: nil)//これをクラス名に変更します

 self.presentViewController(vc, animated: true, completion: nil)
于 2015-05-24T03:30:03.653 に答える
1

ViewController を機能させるためだけに、Storyboard で ViewController をインスタンス化する必要はありませんpresent()。それはハックな解決策です。

VC を提示するときに黒い/空白の画面が表示される場合は、First/RootViewControllerpresent()から呼び出している可能性がありますviewDidLoad()が、最初のビューはまだ準備ができていません。

これを修正するには、present()から呼び出します。つまり、次のようにします。viewDidAppear

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let yourVC = YourViewController()
    self.present(yourVC, animated: true, completion: nil)
}

アプリに「ビュー」が表示されたら、から present() の呼び出しを開始できますviewDidLoad()


(回答で提案されているように)使用UINavigationControllerすることも別のオプションですが、この問題を解決するにはやり過ぎかもしれません。ユーザー フローが複雑になる可能性があります。UINavigationControllerNavigatonBar が必要な場合、または前のビュー コントローラーに戻りたい場合にのみ、ベースのソリューションを使用してください。

于 2018-09-09T16:57:52.993 に答える
0

以下のコードを使用できます:

var vc = self.storyboard?.instantiateViewControllerWithIdentifier("YourViewController") as! YourViewController;
            vc.mode_Player = 1
            self.presentViewController(vc, animated: true, completion: nil)
于 2015-09-05T08:24:45.307 に答える
-1

コードを使用できます:

if let vc = self.storyboard?.instantiateViewController(withIdentifier: "secondViewController") as? secondViewController {
   let appDelegate = UIApplication.shared.delegate as! AppDelegate
   appDelegate.window?.rootViewController = vc
}
于 2017-10-30T03:42:00.970 に答える