次のコードを使用して、プログラムで別のViewControllerに移動します。正常に機能しますが、navigation bar
をある程度非表示にします。 これを修正するにはどうすればよいですか?(必要に応じて、navigation controller
にViewController
を埋め込むことでナビゲーションバーが作成されます。)
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController
self.presentViewController(nextViewController, animated:true, completion:nil)
In Swift
プログラムで作成されたコントローラーを使用
プログラムで作成されたコントローラーに移動する場合は、次を実行します。
let newViewController = NewViewController()
self.navigationController?.pushViewController(newViewController, animated: true)
StoryBoardで作成されたコントローラーを使用
識別子「newViewController」を使用してStoryBoardのコントローラーに移動する場合は、次のようにします。
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
Swift 4.x
二重引用符で囲まれた文字列は常に私を混乱させるので、この質問への答えはこれを明確にするためにグラフィカルなプレゼンテーションが必要だと思います。
銀行アプリの場合、LoginViewControllerとBalanceViewControllerがあります。それぞれにそれぞれの画面があります。
アプリが起動し、ログイン画面が表示されます。ログインに成功すると、アプリは残高画面を開きます。
外観は次のとおりです。
ログインの成功は次のように処理されます。
let storyBoard: UIStoryboard = UIStoryboard(name: "Balance", bundle: nil)
let balanceViewController = storyBoard.instantiateViewController(withIdentifier: "balance") as! BalanceViewController
self.present(balanceViewController, animated: true, completion: nil)
ご覧のとおり、小さな文字のストーリーボードID「balance」はコードの2行目にあるものであり、これは添付のスクリーンショットのようにストーリーボード設定で定義されたIDです。
大文字の「B」を含む「バランス」という用語は、storyboardファイルの名前であり、コードの最初の行で使用されます。
コードでハードコードされた文字列を使用することは非常に悪い習慣であることを知っていますが、どういうわけかiOS開発ではそれが一般的な習慣になり、Xcodeはそれらについても警告しません。
存在しない現在のNavigation Controllerを使用して、新しいViewControllerをプッシュする必要があります。
self.navigationController.pushViewController(nextViewController, animated: true)
彼の答え の@jaiswal Rajanによると。次のようなpushViewControllerを実行できます。
let storyBoard: UIStoryboard = UIStoryboard(name: "NewBotStoryboard", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "NewViewController") as! NewViewController
self.navigationController?.pushViewController(newViewController, animated: true)
したがって、View Controllerを表示する場合、Navigation Controllerには表示されません。完全な画面が表示されます。この場合、別のNavigation Controllerを作成し、nextViewController
をこのルートとして追加し、この新しいnavigationControllerを提示する必要があります。
別の方法は、View Controllerをプッシュすることです。
self.presentViewController(nextViewController, animated:true, completion:nil)
詳細については、Appleのドキュメントを確認してください:- https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//Apple_ref/ doc/uid/TP40006926-CH3-SW96
OperationQueue.main.addOperation {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "Storyboard ID") as! NewViewController
self.present(newViewController, animated: true, completion: nil)
}
メインスレッドで実行されるOperationQueue.main.addOperation
内にコードを配置すると、うまくいきました。