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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

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

Swift

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

Q&A

解決済

1回答

2482閲覧

実装したleftBarButtonItemが表示されなくなり、<Backになってしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/04/01 12:45

編集2018/04/02 09:23

swift4
xcode9.2

一番下のコードLoginControllerにFBSDKログインを実装しています。

ログイン後CustomTabBarControllerへ遷移します。

CustomTabBarControllerの一部です。 //1 のように紐づけられた4つのビューを定義し、viewControllersでまとめています。 プロトコルにUINavigationControllerなどはありません。 ... // 1 let syutsudaiController = syutsudaiController() syutsudaiController.navigationItem.title = "出題" let firstNavigationController = UINavigationController(rootViewController: syutsudaiController) firstNavigationController.title = "" firstNavigationController.tabBarItem.image = UIImage(named: "yubi") ...

CustomTabBar...の
self.navigationItem.hidesBackButton = true
にすると<Back ボタンが消え、ナビバーには何も表示されません。

CustomTabBar...をfalseにして、逆に
紐づけられた4つのビューの
self.navigationItem.hidesBackButton = true
にしても<Back ボタンは表示されます。

私があらかじめ実装していたボタンAを
self.navigationItem.leftBarButtonItemで表示していたのですが、
CustomTabBar...のhidesBackButton = falseにしても、
<Backボタンが表示されていまい、ボタンAを無くなりました。

LoginControllerを介さず、
イニシャルビューをCustomTabBarControllerとして起動すれば、ボタンAは表示されます。

原因がわからない為、質問させていただきます。
よろしくお願いします。

LoginControllerです import UIKit import Firebase import FBSDKLoginKit import FBSDKCoreKit import FirebaseAuth import FirebaseDatabase class LoginController: UIViewController, FBSDKLoginButtonDelegate { override func viewDidLoad() { super.viewDidLoad() self.navigationItem.hidesBackButton = true //すでにログインしてる時???? if (FBSDKAccessToken.current() != nil) { let vc = CustomTabBarController() self.navigationController?.pushViewController(vc, animated: true) } else { //FBログイン let loginButton = FBSDKLoginButton() view.backgroundColor = .white loginButton.frame = CGRect(x: 16, y: 200, width: view.frame.width - 32, height: 50) loginButton.delegate = self loginButton.readPermissions = ["email", "public_profile"] view.addSubview(loginButton) } } //FBログイン func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { if error != nil { print("エラー") } else if result.isCancelled { print("キャンセル") } //コンソールに表示 FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "id, name, email"]).start { (connection, result, error) in if error != nil { print("Failed to start graph requeest", error!) return } fb() print(result!) } func fb() { let accessToken = FBSDKAccessToken.current() guard let accessTokenString = accessToken?.tokenString else { return } let credentials = FacebookAuthProvider.credential(withAccessToken: accessTokenString) Auth.auth().signIn(with: credentials, completion: { (user, error) in if error != nil { print("Something went wrong with our FB user: ", error ?? "") return } else { print("Successfully logged in with our FB user: ", user ?? "") let vc = CustomTabBarController() self.navigationController?.pushViewController(vc, animated: true) } }) } } func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!) { print("ログアウト") } }

//追記しました。
内容に不備があった為、大幅に本文を修正しました。申し訳ありません。

//syutsudaiControllerコードを追記しました。

syutsudaiControllerの一部です。 import UIKit class syutsudaiController: UITableViewController { //ボタン private var qButton: UIBarButtonItem! let cellId = "cellId" let headerId = "headerId" var items = ["Item 1", "Item 2", "Item 3"] override func viewDidLoad() { super.viewDidLoad() //ここです???? self.navigationItem.hidesBackButton = false tableView.backgroundColor = .white tableView.sectionHeaderHeight = 50 tableView.register(MyCell.self, forCellReuseIdentifier: "cellId") tableView.register(Header.self, forHeaderFooterViewReuseIdentifier: "headerId") // qButton = UIBarButtonItem(title: "あ", style: .plain, target: self, action: #selector(onClickButton)) self.navigationItem.leftBarButtonItem = qButton } //ボタン @objc func onClickButton(_ sender: UIButton){ let layout = UICollectionViewFlowLayout() let vc = MyPageController(collectionViewLayout: layout) layout.itemSize = CGSize(width: view.frame.width, height: view.frame.height) navigationController?.pushViewController(vc, animated: true) } ...

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

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

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

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

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

newmt

2018/04/01 23:02

LoginControllerでself.navigationItem.hidesBackButton = trueをfalseとしてみると何か変わりますでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/02 03:54 編集

newmt様 self.navigationItem.hidesBackButton = falseを、LoginControllerのみに書きましたが、 全て<Backが表示されてしまいます。 ボタンAが表示されずにいます。 私の内容に不備があった為、大幅に本文修正しました。見ていただければ幸いです。 恐れ入りますが、よろしくお願いします。
newmt

2018/04/02 04:01

syutsudaiControllerの中でself.navigationItem.leftBarButtonItemを設定している箇所を見せていただくことはできますでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/02 04:27 編集

newmt様 勿論です。ありがとうございます。 追記しました!
newmt

2018/04/02 04:48

まだ再現できていないので違うかもしれませんが、let firstNavigationController = UINavigationController(rootViewController: syutsudaiController)をself.navigationController?.pushViewController(syutsudaiController, animated: true)にすると何か変わりますでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/02 05:00

self.navigationController?push...を追記してみましたが変わりませんでした...
guest

回答1

0

ベストアンサー

質問欄だと読みづらくなるので回答に記載します。

syutsudaiControllerの中で

//ここです???? self.navigationItem.hidesBackButton = true

として

qButton = UIBarButtonItem(title: "あ", style: .plain, target: self, action: #selector(onClickButton)) self.navigationItem.leftBarButtonItem = qButton

override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() qButton = UIBarButtonItem(title: "あ", style: .plain, target: self, action: #selector(onClickButton)) self.navigationItem.leftBarButtonItem = qButton // または //self.navigationController?.navigationBar.topItem?.leftBarButtonItem = qButton }

に移動するとどうなりますでしょうか?

【追記】
コメントでのやり取りにより最終的には以下の方法になりました。

LoginControllerからCustomTabBarControllerに遷移する際にrootViewControllerを入れ替える

let vc = CustomTabBarController() let delegate = UIApplication.shared.delegate as! AppDelegate delegate.window?.rootViewController = vc

投稿2018/04/02 05:43

編集2018/04/02 21:14
newmt

総合スコア1277

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

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

退会済みユーザー

退会済みユーザー

2018/04/02 05:59

newmt樣 変わらず<Back の表示になってしまいます...
newmt

2018/04/02 07:07

何か私の環境と状況が違うのかもしれません。 もう少しコードの全体を見せていただくことはできませんでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/02 08:43

newmt様 何度もありがとうございます。 本文のgithubのURLを追記しました。 ご確認頂けますか?お世話になります。
newmt

2018/04/02 09:04

let vc = CustomTabBarController() self.navigationController?.pushViewController(vc, animated: true) ここを let vc = CustomTabBarController() let delegate = UIApplication.shared.delegate as! AppDelegate delegate.window?.rootViewController = vc とした場合どうなりますでしょうか?
退会済みユーザー

退会済みユーザー

2018/04/02 09:21 編集

ナビバーのボタンを表示できました! 本当にありがとうございます。ベストアンサーにさせて頂きたいのですが、こちらでよろしいでしょうか? また、このナビバー周りで今後別に質問させて頂くと思いますので、 もし見かけることがありましたら、是非よろしくお願いします。
退会済みユーザー

退会済みユーザー

2018/04/02 09:22 編集

今回はDelegateが引き継がれていないために、遷移後は表示されなかったのでしょうか?
newmt

2018/04/02 10:25 編集

UINavigtaionControllerを重ねて使用しており、最初のUINavigtaionControllerの下に隠れているように思いましたので、rootViewControllerを入れ替える方法でうまくいくのではないかと考えました。ひとまずはこの方法でよいのかと思いますが、書き方が色々ありますので、良さそうなものを探してみてください。 参考記事:https://qiita.com/ktanaka117/items/fb3dac89f35422943e97
退会済みユーザー

退会済みユーザー

2018/04/02 11:43 編集

ログイン、ログアウト時の遷移は 私が書いていたpush遷移ではなく、 rootViewControllerを今回教えていただいた方法で切り替えて、 遷移させた方が使い勝手は良いのでしょうか? ログイン前のビューとログイン後は切り離した方が良いのかな?と思いましたので... 先日もお世話になりましたし、今回も大変お時間頂きました。 理解が深まりとても助かりました ありがとうございました。 仰るサイトも参考にさせて頂きます。
newmt

2018/04/02 21:27

個人的には、戻るボタンを抑える処理が不要になり、これまでの画面の重なりを一度クリアするためにも、ログイン、ログアウト時にrootViewControllerを入れ替えるような方法を取ることは結構あります。
退会済みユーザー

退会済みユーザー

2018/04/03 03:29

いやーもう本当に分かりやすいです。感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問