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

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

0回答

388閲覧

SegementSlideDefaultViewControllerを継承したViewControllerを用いてWindow生成をしたい

ringoringogogo

総合スコア15

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クリップ

投稿2021/01/26 05:28

SegementSlideDefaultViewControllerを継承したBaseViewControllerがあり、アプリ起動時、タブと各コンテンツが正しく表示されている状態です。

Universal Linkで、あるURLをタップされた際にBaseViewControllerの特定のタブを選択した状態の画面を出したいと思い、試行錯誤したのですがうまくいかず、こちらに質問させていただきました。

まだ勉強して間もなく、基本的なことが理解できていない可能性が高いのですが、何卒ご指摘いただけると幸いでございます。

現在の実装と現象

AppDelegate.swiftでUniversalLinkがタップされると実行される箇所に以下の記載をしています。
※前後のソースは不要と判断してこちらに掲載していませんが、不足している情報などございましたらご指摘いただけますようお願いいたします。

####1 segementSlideContentScrollViewをrootViewControllerにセット

swift

1// windowを生成 2self.window = UIWindow(frame: UIScreen.main.bounds) 3// Storyboardを指定 4let storyboard = UIStoryboard(name: "Main", bundle: nil) 5let nextVC = storyboard.instantiateViewController(identifier: "BaseViewController") as! BaseViewController 6self.window?.rootViewController = nextVC.segementSlideContentScrollView(at: 3) 7self.window?.makeKeyAndVisible()

こちらのコードですとnextVCの3つめのタブが選択されているChildViewControllerのみが開き、タブを含むHeader部分が表示されませんでした。

次節以降はnextVC生成部分のみ記載いたします。

####2 defaultSelectedIndexを指定した上でcurrentのViewControllerをセット

swift

1nextVC.viewDidLoad() 2nextVC.defaultSelectedIndex = 3 3self.window?.rootViewController = nextVC.currentSegementSlideContentViewController

これだと画面が真っ暗になってしまいました

####3 defaultSelectedIndexを指定した上でnextVCをセット

swift

1nextVC.viewDidLoad() 2nextVC.defaultSelectedIndex = 3 3self.window?.rootViewController = nextVC

これだと画面が真っ白のままとなりました・・・

####4 HeaderViewを追加

swift

1 nextVC.viewDidLoad() 2 nextVC.defaultSelectedIndex = 3 3 self.window?.rootViewController = nextVC.segementSlideContentScrollView(at: 3) 4 self.window?.addSubview(nextVC.segementSlideHeaderView()!)

以下の例外が発生
Fatal error: Unexpectedly found nil while unwrapping an Optional value

恐れ入りますが、ご返信いただけると幸いです・・

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

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

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

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

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

hoshi-takanori

2021/01/28 21:42

えっと、SegementSlideDefaultViewController ってことはこちらのライブラリをお使いでしょうか? https://github.com/Jiar/SegementSlide また、元 (正しく表示されている状態) のアプリ初期化コードはどうなってますか? ちなみに、nextVC.viewDidLoad() を自分で呼ぶのは間違ってますし、rootViewController に nextVC 以外のものを設定するのもたぶんおかしいと思います。
ringoringogogo

2021/02/03 00:20 編集

説明不足で申し訳ありません。ご指摘の通りSegementSlideを使用しています。 アプリ初期化コードというのがこちらかどうか自信がないのですが、タブの中身を表示させているのは以下のコードとなります。 ``` override func segementSlideContentViewController(at index: Int) -> SegementSlideContentScrollViewDelegate? { switch index { case 0: return storyboard?.instantiateViewController(identifier: "TopViewController") as! TopViewController case 1: return storyboard?.instantiateViewController(identifier: "FavoriteViewController") as! FavoriteViewController default: return storyboard?.instantiateViewController(identifier: "TopViewController") as! TopViewController } } ```
hoshi-takanori

2021/02/03 09:03

ごめんなさい、AppDelegate.swift の didFinishLaunchingWithOptions で window.rootViewController に何を設定してるかを聞きたかったんですが、たぶん let nextVC = storyboard.instantiateViewController(identifier: "BaseViewController") as! BaseViewController をそのままセットしてますよね。 window.rootViewController はアプリのトップレベルに表示するものなので、これを nextVC.segementSlideContentScrollView(at: 3) とかにしてしまうとそのタブしか表示されないのは当然です。UniversalLink がタップされた場合は、「特定のタブを開いた状態の BaseViewController」を設定する必要があります。なので、3 がいちばん近いはずですが、断片的なソースしか貼られてないので何が問題かは良く分かりません。defaultSelectedIndex を設定するタイミングの問題のような気もしますが…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問