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

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++と共存することが意図されています

Q&A

解決済

1回答

809閲覧

PageViewControllerでNavigationControllerを表示する

hameji001

総合スコア639

iOS

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

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/10/22 09:40

PageViewControllerでNavigationControllerを表示する

質問させてください。
下記のサイトを参考にStroyboardでPageviewControllerをTopに置いてるのですが、
https://qiita.com/Takeshi_Akutsu/items/dbf54df8e8a50e8ed5be

その内容のViewにStoryBoardからNavigationControllerをEmbed Inしました。

しかし、シュミレートすると、NavigationBarが表示されません。
直接StoryboardでView自体を指定しているから、
NavigationBarが表示されないのだろうということはわかるのですが、

どのようにコードを直したらいいのか、ご教諭いただけないでしょうか?

該当のソースコード

class PageViewController: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() self.setViewControllers([getLeftView()], direction: .forward, animated: true, completion: nil) self.dataSource = self } func getLeftView() -> ChartViewController { return storyboard!.instantiateViewController(withIdentifier: "chartViewController") as! ChartViewController } func getRightView() -> LogViewController { return storyboard!.instantiateViewController(withIdentifier: "logViewController") as! LogViewController } } extension PageViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { if viewController.isKind(of: ChartViewController.self) { return getRightView() } else if viewController.isKind(of: LogViewController.self) { return getLeftView() } return nil } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { if viewController.isKind(of: ChartViewController.self) { return getRightView() } else if viewController.isKind(of: LogViewController.self) { return getLeftView() } return nil } }

試したこと

ググってみたのですが、解決方法がよくわかりませんでした。

考え方を変えると、一番上のVIewにNavigationControllerをEmbed inして、
その中のViewにPageViewControllerを入れれば(方法が不明ですが)いいのですか?

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

Swift 4.2, Xcode 10

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

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

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

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

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

guest

回答1

0

ベストアンサー

UINavigationController -> PageViewController -> ViewControllers
ではなく
PageViewController -> (UINavigationController -> ViewController)s
です

参考コード
https://github.com/osanaikoutarou/PVC

投稿2018/10/23 08:27

kosanai

総合スコア471

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

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

hameji001

2018/10/23 16:19

ありがとうございます。 すっきりとわかりやすくサンプルコードを作っていただき感謝です。 理解できました。 スクロールの条件の取得の仕方も勉強になりました。 NavigationControllerが一つで済むのも、面白いとこですね。 Storyboardのpageviewcontroll内のViewControllerを再利用じゃなく、 2つとか3つ用いたい場合、 NavigationBarのボタンはコード作成しなきゃいけない? ってことですよね? 自分はView2つにそれぞれNavigationControllerも載せちゃいました。
kosanai

2018/10/24 04:09

ちょっと状況が飲み込めませんが 実際にはUINavigationControllerとViewControllerの組はそれぞれ作ると思います それぞれ1storyboardにして、UINavigationControllerをinitialにすると使いやすいと思います PageViewControllerと似ているUITabbarControllerを一度storyboard上で使ってみると、状況がより掴みやすと思います こちらの場合も、UINaviagtionBarを挟むのは、ViewControllerの一つ前です (もちろんUITabbarControllerの前にUINavigationControllerを設置するケースもあります。しかしレアです)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問