アクセスsetViewControllersへあなたの子ビューコントローラから、あなたの親のPageViewControllerを知るためにあなたの子ビューコントローラが必要になります。これを行うには、プロトコルを作成することから始めます(プロトコルを試したと言いましたが、私の方法を見てください)。このプロトコルは、すべての子ビューコントローラが親PageViewControllerへの参照を持つことを保証する。
protocol PageObservation: class {
func getParentPageViewController(parentRef: PageViewController)
}
子ビューコントローラがPageObservation Protocolに準拠していることを確認してください。あなたは各子ビューコントローラを作成すると、あなたのPageViewControllerで
class Child1ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}
}
class Child2ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}
}
、PageObservation型にそれらをキャストし、親PageViewControllerの参照を渡します。私は、orderViewControllersという配列を使ってページを作成しています。私のUIPageViewControllerDataSourceデリゲートメソッドはどのページをロードするかを知るためにこのメソッドを使用していますが、この例とは無関係です。ページを作成する方法が違う場合に備えてお知らせします。
class PageViewController: UIPageViewController {
var orderedViewControllers: [UIViewController] = []
//creating child 1
//i am using storyboard to create the child view controllers, I have given them the identifiers Child1ViewController and Child2ViewController respectively
let child1ViewController = UIStoryboard(name: "Main", bundle: nil) .
instantiateViewController(withIdentifier: "Child1ViewController")
let child1WithParent = child1ViewController as! PageObservation
child1WithParent.getParentPageViewController(parentRef: self)
orderedViewControllers.append(child1ViewController)
//creating child 2
let child2ViewController = UIStoryboard(name: "Main", bundle: nil) .
instantiateViewController(withIdentifier: "Child2ViewController")
let child2WithParent = child2ViewController as! PageObservation
child2WithParent.getParentPageViewController(parentRef: self)
orderedViewControllers.append(child2ViewController)
}
子ビューコントローラ内で、setViewControllerにアクセスできます。他の回答は、上記の言ったこと、あなたができるにもかかわらず、サイドノートでは
class Child1ViewController: UIViewController, PageObservation {
var parentPageViewController: PageViewController!
func getParentPageViewController(parentRef: PageViewController) {
parentPageViewController = parentRef
}
func accessSetViewControllers() {
parentPageViewController.setViewControllers(//do what you need)
}
}
、:私はchild1ViewControllerでsetViewControllersを呼び出したい場合たとえば、私はsetViewControllersにアクセスFUNCと呼ばれるaccessSetViewControllersを()作成しましたdataSourceを好きなものに設定します。私はときどき何かをする前に画面からスワイプしないようにdataSourceをnilに設定し、その後dataSourceを追加してスワイプを継続できるようにします。
あなたの答えをありがとう。しかし、あなたのコードでは "pageViewController"とは何ですか?子コントローラを作成する際に使用しています。 –
それは間違いでした、申し訳ありません。私は今それを修正しました。 – gwinyai
私はあなたのソリューションを試して、すべてがうまくいくようです!はるかに最良の答えはオンラインで見つけた! しかしもう1つ質問があります: 私は3つのチャイルドビューコントローラを持ち、それぞれが独自のナビゲーションコントローラに埋め込まれているとしましょう。私はどのように "子コントローラを作成する"?ナビゲーションコントローラ - ストーリーボード - IDでそれらを参照するだけでは機能しませんでした。私は他の何かを変えなければなりませんか? よろしくお願いいたします。ありがとうございました! –