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

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

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

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

1回答

1452閲覧

UINavigationControllerのpushViewControllerで画面遷移できない

daikanyaman

総合スコア5

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/01/22 16:41

前提・実現したいこと

ボタンをタップした際に
UINavigationControllerpushViewController を使って画面遷移したいです。

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

swift

1func toSignupForm() { 2 let navigator = DefaultSignupFormNavigator(navigationController: UINavigationController()) 3 let viewController = SignupFormViewController(navigator: navigator) 4 navigationController?.pushViewController(viewController, animated: true) 5 }

でエラーはでず、画面遷移しません。

該当のソースコード

swift

1import UIKit 2 3@UIApplicationMain 4class AppDelegate: UIResponder, UIApplicationDelegate { 5 var window: UIWindow? 6 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 7 FirebaseApp.configure() 8 window = UIWindow(frame: UIScreen.main.bounds) 9 let navigationController = UINavigationController() 10 let navigator = DefaultWelcomeNavigator(navigationController: navigationController) 11 window?.rootViewController = WelcomeViewController(navigator: navigator) 12 window?.makeKeyAndVisible() 13 return true 14 } 15}

swift

1import UIKit 2 3class WelcomeViewController: UIViewController { 4 let navigator: WelcomeNavigator 5 6 init(navigator: WelcomeNavigator) { 7 self.navigator = navigator 8 super.init(nibName: nil, bundle: nil) 9 } 10 11 required init?(coder: NSCoder) { 12 fatalError("init(coder:) has not been implemented") 13 } 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 title = "fanew" 18 view.backgroundColor = UIColor.white 19 view.addSubview(buttonStackView) 20 } 21 22 private lazy var buttonStackView: UIStackView = { 23 let stackView = UIStackView(arrangedSubviews: [signupButton, signinButton]) 24 stackView.frame = CGRect(x: 0, y: 300, width: self.view.frame.width, height: self.view.frame.height / 4) 25 stackView.axis = .vertical 26 stackView.alignment = .center 27 stackView.distribution = .equalSpacing 28 stackView.spacing = 3 29 return stackView 30 }() 31 32 private lazy var signupButton: UIButton = { 33 let button = UIButton() 34 button.setTitle("新規登録", for: .normal) 35 button.setTitleColor(.black, for: .normal) 36 button.addTarget(self, action: #selector(pushSignupButton), for: .touchUpInside) 37 return button 38 }() 39 40 private lazy var signinButton: UIButton = { 41 let button = UIButton() 42 button.setTitle("ログイン", for: .normal) 43 button.setTitleColor(.black, for: .normal) 44 button.addTarget(self, action: #selector(pushSigninButton), for: .touchUpInside) 45 return button 46 }() 47 48 @objc func pushSignupButton(sender: UIButton){ 49 navigator.toSignupForm() 50 } 51 52 @objc func pushSigninButton(sender: UIButton){ 53 navigator.toSigninForm() 54 } 55 56}
import UIKit protocol WelcomeNavigator { func toSignupForm() func toSigninForm() } final class DefaultWelcomeNavigator: WelcomeNavigator { private var navigationController: UINavigationController? init(navigationController: UINavigationController?) { self.navigationController = navigationController } func toSignupForm() { let navigator = DefaultSignupFormNavigator(navigationController: UINavigationController()) let viewController = SignupFormViewController(navigator: navigator) navigationController?.pushViewController(viewController, animated: true) } func toSigninForm() { let viewController = SigninFormViewController() navigationController?.pushViewController(viewController, animated: true) } }

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

Swift5、Xcode11.3.1

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

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

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

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

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

MasatoUchida

2020/01/23 02:11

navigationController?の?の部分についてぐぐってみてください。optionalといいます。
guest

回答1

0

UINavigationControllerがビューのヒエラルキーに存在しないからでは?
(メモリ中にあるだけで画面には乗っていないくないですか?)

投稿2020/01/24 02:40

takabosoft

総合スコア8356

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問