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

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

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

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

iOS

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

2回答

3319閲覧

[Swift][UITabBarController]画面遷移でタブバーを表示

happyhappy

総合スコア346

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

iOS

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2015/12/01 08:37

編集2015/12/01 08:42

A、B二つの画面があり、それぞれタブバーのアイコンをタップすることにより、遷移します。(タブバーのアイコンは二つ)
B画面に存在するボタンをタップし、B'画面に遷移し、B'画面に存在するボタンをタップしてA画面に戻るという流れがあります。
B'画面はサブ画面なので、タブバーは表示されなくて良いのですが、A画面に戻った時にタブバーが表示されるようにしたいです。
プログラムソースは以下です。(Storyboardを使わずにコードで実装したい)

// UITabBarControllerを継承したクラスを作成
class MainTabBarController: UITabBarController {

override func viewDidLoad() { super.viewDidLoad() let firstViewController = FirstViewController() let secondViewController = SecondViewController() firstViewController = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Bookmarks, tag: 1) secondViewController = UITabBarItem(tabBarSystemItem: UITabBarSystemItem.Contacts, tag: 2) let firstNavigationController = UINavigationController(rootViewController: firstViewController) let secondNavigationController = UINavigationController(rootViewController: secondViewController) self.setViewControllers([firstNavigationController, secondNavigationController], animated: true) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }

}

// AppDelegate.swiftのメソッドを変更
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.

self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window?.rootViewController = mainTabBarController self.window?.makeKeyAndVisible() return true

}

// B画面からB'画面への遷移
let nextViewController = bDashViewController()
let navigationController = UINavigationController(rootViewController: nextViewController)
self.presentViewController(navigationController, animated: false, completion: nil)

// B'画面からA'画面への遷移
// 遷移後タブバーを表示したい
let nextViewController = firstViewController()
let navigationController = UINavigationController(rootViewController: nextViewController)
self.presentViewController(navigationController, animated: false, completion: nil)

よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

コードを見るに、説明文と実装が食い違っている気がしたので確認させてください

Swift

1// B'画面からA'画面への遷移 2// 遷移後タブバーを表示したい 3let nextViewController = firstViewController()

こちらのfirstViewController() で取得しているインスタンスは以下のどちらのインスタンスでしょうか?
0. MainTabBarController.firstViewControllerのインスタンス
0. FirstViewControllerを新しく生成したインスタンス

また説明文ではB'画面からの遷移先は「Aの画面に戻る」と書かれていますが、コメント文には「B'画面からA'画面への遷移」となっています。
こちらのA'はAの間違いなのか、それともAとは別のA'を想定されているのでしょうか?

コードを見る限り画面の構造は以下のようになっています(パターン1)
┏ A
┗ B → B' → A'(上記の2であれば問題ないが1の場合は画面遷移の設計に問題あり)

happyhappyさんがやりたいのは以下の形でしょうか?(パターン2)
┏ A
┗ B → B' ↑(Aの画面に切り替える)

もしパターン2の形であれば、B'画面からmainTabBarController.selectedIndex = 0としてあげれば実現できます。

Swift

1// B'画面からA画面のタブへの切り替え 2if let tabController = UIApplication.sharedApplication().delegate?.window??.rootViewController as? MainTabBarController { 3 tabController.selectedIndex = 0 4}

投稿2015/12/02 03:38

TakutoNagano

総合スコア150

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

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

happyhappy

2015/12/02 08:01

ご回答ありがとうございます。以下で解決できました。 if let tabController = UIApplication.sharedApplication().delegate?.window??.rootViewController as? MainTabBarController { self.dismissViewControllerAnimated(true, completion: nil) tabController.selectedIndex = 0 } ※一番大事な部分を間違えてしまい、お恥ずかしい限りです。パターンまで示していただいて、解決に導いていただいてありがとうございました。
guest

0

解決済 画面遷移時にUITabBarを隠す方法(iOS)

これのベストアンサーでどうでしょうか。

投稿2015/12/01 16:30

domonr

総合スコア263

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

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

happyhappy

2015/12/02 08:02

ご回答ありがとうございます。お陰様で解決に至りました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問