質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

938閲覧

コードでNavigationControllerを実装するとStoryBoardで設置しているオブジェクトが消える

ataru2222

総合スコア272

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2023/01/16 12:16

実現したいこと

コードでNavigationControllerを実装するとStoryBoardで設置しているオブジェクトが消えてしまうのでこちらをを表示したい。

発生している問題・エラーメッセージ

現在コードでNavigationControllerを実装したのですが、StoryBoard上に配置したオブジェクトが表示されません。
(コードで表示設定させたオブジェクトは表示される)
こちらについて表示する方法はありますか?

該当のソースコード

Swift

1import UIKit 2 3class ViewController: UIViewController { 4 5 6 override func viewDidLoad() { 7 super.viewDidLoad() 8 9 title = "FirstViewController" 10 view.backgroundColor = .systemBackground 11 12 let button = UIButton() 13 view.addSubview(button) 14 15 button.setTitle("Next Page", for: .normal) 16 button.setTitleColor(.purple, for: .selected) 17 button.backgroundColor = .systemCyan 18 button.addTarget(self, action: #selector(goToNextPage(_ :)), for: .touchUpInside) 19 20 //layout 21 button.translatesAutoresizingMaskIntoConstraints = false 22 button.widthAnchor.constraint(equalToConstant: 100).isActive = true 23 button.heightAnchor.constraint(equalToConstant: 44).isActive = true 24 button.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 25 button.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 26 } 27 28 //Next Pageボタンが押されたときの処理 29 @objc private func goToNextPage(_ sender: UIButton) { 30 let secondViewController = SecondViewController() 31 navigationController?.pushViewController(secondViewController, animated: true) 32 } 33 34}

Swift

1import UIKit 2 3class SecondViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 title = "戻る" 9 view.backgroundColor = .systemBackground 10 } 11 12}

Swift

1import UIKit 2 3class SceneDelegate: UIResponder, UIWindowSceneDelegate { 4 5 var window: UIWindow? 6 var navigationController: UINavigationController? 7 8 func scene(_ scene: UIScene, 9 willConnectTo session: UISceneSession, 10 options connectionOptions: UIScene.ConnectionOptions) { 11 12 guard let windowScene = (scene as? UIWindowScene) else { return } 13 window = UIWindow(frame: UIScreen.main.bounds) 14 window?.windowScene = windowScene 15 let ViewController = ViewController() 16 navigationController = UINavigationController(rootViewController: ViewController) 17 self.window?.rootViewController = navigationController 18 window?.makeKeyAndVisible() 19 } 20 21 func sceneDidDisconnect(_ scene: UIScene) { 22 23 } 24 25 func sceneDidBecomeActive(_ scene: UIScene) { 26 27 } 28 29 func sceneWillResignActive(_ scene: UIScene) { 30 31 } 32 33 func sceneWillEnterForeground(_ scene: UIScene) { 34 35 } 36 37 func sceneDidEnterBackground(_ scene: UIScene) { 38 39 } 40 41} 42

このようなコードがあったとき
StoryBoard上にボタンを配置
イメージ説明

コードのレイアウトで書いたもののみが適用される
イメージ説明

試したこと

NavigationControllerのみのこちらのテストアプリを作成して、最低限の機能のみで実装してみて色々調査してみましたが原因がよく分かりません。

・ボタンの色を黒や青に変えるも表示されず。

・ViewController内の
view.backgroundColor = .systemBackground
こちらをコメントアウトすると画面が真っ黒に

画面の下に回ってしまっている?または見た目が同じViewを表示してしまっている?のかわかりませんが、こちらは何が起こっているのでしょうか?

詳しい方いらっしゃいましたらご教授ください。

よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/01/16 15:42

let ViewController = ViewController() というのは、Storyboard を使わずに ViewController を作る、という意味なので、当然そうなるでしょうね…。
ataru2222

2023/01/16 21:18

hoshi様 ありがとうございます。 let ViewController = ViewController() の部分のコード探ってみます。
ataru2222

2023/01/17 11:50

hoshi様 できました! let ViewController = ViewController() というのは、Storyboard を使わずに ViewController を作る、という意味 こちらめちゃくちゃ勉強になりました。 本当にいつも回答していただきありがとうございます。
guest

回答1

0

自己解決

hoshi様のアドバイスのもと解決できました。

SceneDelegateのこの部分のこちらのコードでは新規のviewControllerを作るのようで

Swift

1let ViewController = ViewController()

こちらを使うことで元々あるViewControllerを活用することができました。

Swift

1let storyBoard = UIStoryboard(name: "Main", bundle: nil) 2let ViewController = storyBoard.instantiateViewController(withIdentifier: "main") as! ViewController

StoryBoardのViewControllerの設定
イメージ説明

投稿2023/01/17 11:48

ataru2222

総合スコア272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問