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

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

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

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

Q&A

解決済

1回答

412閲覧

[swift] storyboardにNavigationBarを置いていないのに実行するとNavigationBarが表示される問題

Kaguya_4869

総合スコア116

Swift

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

0グッド

0クリップ

投稿2019/08/02 09:02

#質問したいこと
ストーリーボードには、NavigationBarを置いていないのに、なぜか実行すると、NavigationBarが出現してくる。
#コード

swift

1//navigationbarが出てくるstory board1 2import UIKit 3import Firebase 4import FirebaseAuth 5 6class AccountViewController: UIViewController { 7 var acount: FirebaseApp! 8 9 @IBOutlet private weak var nameTextField: UITextField! 10 @IBOutlet private weak var emailTextField: UITextField! 11 @IBOutlet private weak var passwordTextField: UITextField! 12 13 var isFirst = true // 最初の処理かどうか 14 15 16 17 @IBAction private func didTapSignUpButton() { 18 let email = emailTextField.text ?? "" 19 let password = passwordTextField.text ?? "" 20 let name = nameTextField.text ?? "" 21 22 Auth.auth().createUser(withEmail: email, password: password) { [weak self] result, error in 23 guard let self = self else { return } 24 if let user = result?.user { 25 let req = user.createProfileChangeRequest() 26 req.displayName = name 27 req.commitChanges() { [weak self] error in 28 guard let self = self else { return } 29 if error == nil { 30 user.sendEmailVerification() { [weak self] error in 31 guard let self = self else { return } 32 if error == nil { 33 // 仮登録完了画面へ遷移する処理 34 // サインアップ完了のフラグを保持する 35 UserDefaults.standard.set(true, forKey: "appSignUpStatusKey") 36 UserDefaults.standard.synchronize() 37 } 38 self.showErrorIfNeeded(error) 39 } 40 } 41 self.showErrorIfNeeded(error) 42 } 43 } 44 self.showErrorIfNeeded(error) 45 } 46 // サインアップ完了のフラグを保持する 47 UserDefaults.standard.set(true, forKey: "appSignUpStatusKey") 48 // ユーザー名を保存する 49 UserDefaults.standard.set(name, forKey: "userNameKey") 50 UserDefaults.standard.synchronize() 51 if (email == "" || password == "" || name == "") { 52 let message = "全てのフォームに記入して下さい。" 53 let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) 54 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 55 self.present(alert, animated: true, completion: nil) 56 } 57 } 58 59 60 private func showErrorIfNeeded(_ errorOrNil: Error?) { 61 // エラーがなければ何もしません 62 guard let error = errorOrNil else { return } 63 let message = "エラーが起きました" 64 let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) 65 alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil)) 66 present(alert, animated: true, completion: nil) 67 } 68 69 70 override func viewDidLoad() { 71 super.viewDidLoad() 72 73 // Do any additional setup after loading the view. 74 } 75 76 /* 77 // MARK: - Navigation 78 79 // In a storyboard-based application, you will often want to do a little preparation before navigation 80 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 81 // Get the new view controller using segue.destination. 82 // Pass the selected object to the new view controller. 83 } 84 */ 85 86}

swift

1 2//navigationbarが出てくるstory board1 3 4import UIKit 5 6class FirstViewController: UIViewController { 7 8 @IBOutlet weak var label: UILabel! 9 @IBOutlet weak var userLabel: UILabel! 10 @IBOutlet weak var testLabel: UILabel! 11 12 // ユーザー名 13 var userName: String = "" 14 15 override func viewDidLoad() { 16 super.viewDidLoad() 17 18 19 20 label.frame = CGRect(x: 0, y: 30, width: self.view.frame.width, height: 150) 21 label.textAlignment = NSTextAlignment.center 22 23 label.numberOfLines = 2 24 self.view.addSubview(label) 25 26 let now = Date() 27 28// let decimal = 3.14 29// let decimal2 = decimal * 10 30 31 let formatter = DateFormatter() 32 33 formatter.dateFormat = "yyyy/MM/dd" 34 label.text = formatter.string(from: now) 35 // Do any additional setup after loading the view. 36 37 // ユーザー名を表示 38 userLabel.text = userName 39 40 // ユーザー名を表示 41 if let userName = UserDefaults.standard.string(forKey: "userNameKey") { 42 userLabel.text = "(userName)さんこんにちは。" 43 } else { 44 userLabel.text = "読み込めなかった時" 45 } 46 47 let myDateFormatter = DateFormatter() 48 myDateFormatter.dateFormat = "dd日" 49 let day1:Date = myDateFormatter.date(from: "")! 50 let day2:Date = myDateFormatter.date(from: "")! 51 let dayInterval = (Calendar.current.dateComponents([.day], from: day1, to: day2)).day 52 print(dayInterval!) 53 54// print("テストまであと(floor(decimal2) / 10)日") // 3.1 (切り捨て) 55// testLabel.text = "テストまであと(floor(decimal2) / 10)日" 56 } 57 58 59 /* 60 // MARK: - Navigation 61 62 // In a storyboard-based application, you will often want to do a little preparation before navigation 63 override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 64 // Get the new view controller using segue.destination. 65 // Pass the selected object to the new view controller. 66 } 67 */ 68 69} 70

story board
実行

よろしくおねがいします。

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

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

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

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

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

hayabusabusash

2019/08/02 11:22

AppDelegateでUINavigationController(rootViewController:)を使ってNavigationController配下にしていませんか?
fuzzball

2019/08/05 00:21

この2つのViewControllerはどうやって画面に表示しているのでしょうか?
Kaguya_4869

2019/08/05 06:54

AppDelegateのコードのところの let rootVC = UINavigationController(rootViewController: UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() ?? UIViewController() のところを let rootVC = UIViewController(rootViewController: UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() ?? UIViewController() とすると、 Incorrect argument label in call (have 'rootViewController:', expected 'coder:') Replace 'rootViewController' with 'coder' というエラーが出てきます。
Kaguya_4869

2019/08/05 06:55

PresentModallyで2つの画面をつなげています。
fuzzball

2019/08/05 07:35 編集

>>PresentModallyで2つの画面をつなげています。 どっちがどっちなのか分かりませんが、それは、 AccountViewController → FirstViewController もしくは, FirstViewController → AccountViewController の繋がりの話ですよね? 質問画像のStoryboardに表示されているViewControllerはどうやって表示しているのでしょうか?
Kaguya_4869

2019/08/05 10:43

>>質問画像のStoryboardに表示されているViewControllerはどうやって表示しているのでしょうか? すみません。何を聞いているのかいまいち分からなくて、もうちょっと詳しく教えていただけませんか?
fuzzball

2019/08/05 11:01

Name/e-mail/passwordが表示された画面はどうやって表示しているのでしょうか?
guest

回答1

0

ベストアンサー

コードでNavigationController配下にしているので
StoryboardでNavigationControllerを追加させなくても表示されます。

コメントでいただいた以下の部分が該当すると思います。

Swift

1let rootVC = UINavigationController(rootViewController: UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() ?? UIViewController())

表示させたくないのなら、
NavigationBarのisHiddentrueにしてしまう
(この場合、再度表示したいときはisHiddenfalseに設定する必要があります)

Swift

1 // AccountViewControllerの想定です 2 override func viewDidLoad() { 3 super.viewDidLoad() 4 self.navigationController?.navigationBar.isHidden = true 5 } 6

もしくは、そもそもNavigationController配下にしないのどちらかではないでしょうか?

Swift

1let rootVC = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() ?? UIViewController()

投稿2019/08/08 02:02

hayabusabusash

総合スコア767

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

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

Kaguya_4869

2019/08/10 07:51

出来ました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問