2016-11-22 7 views
0

私はそれらの間でスワイプできるように、SnapViewスタイルのUIViewControllersを取得しようとしています。私はスワイプの部分をうまく使っていますが、ボタンを押すことでビューコントローラ間を移動することもできます。子UIVIewControllerからUIScrollViewを制御する

私はその後、私は次のようにし、スクロールビューにUIViewControllersを追加し、その中にUIScrollViewを持つ親またはコンテナビューコントローラを持っています。それぞれに対してように

self.addChildViewController(ViewControllerA) 
self.scrollView!.addSubview(ViewControllerA.view) 
ViewControllerA.didMove(toParentViewController: self) 

と。

UIScrollViewはContainerビューに格納されているため、ViewControllerAのボタンを押すと、Containerビューの関数を呼び出してスクロールビューを移動したいと考えています。

私はデリゲートを使用しようとしていましたが、ちょっとしたコードの臭いのように見える別のデリゲートを各自の子供ビューに書く必要があると思います。

すべてのお役に立ちました。

+0

は次のように私には思えます親/コンテナのビューコントローラはデリゲートになります。あなたの子供のそれぞれは、同じプロトコルに準拠するデリゲートプロパティを持ち、それぞれが同じ親を指しています。 –

答えて

1

別のView Controllerを作成し、私のプロトコルをそこに配置しました。次に、私の子ビューのUIViewControllerのサブクラスを作成するのではなく、新しいSliderViewControllerのサブクラスで、それが保持するデリゲート関数を呼び出すことができます。

0

あなたのparentViewControllerはchildViewControllersの代理人でなければなりません。 ParentViewControllerで

protocol ChildViewControllerDelegate { 
func shouldScrollToPage1() 
} 

class ChildViewController { 

weak var delegate: ChildViewControllerDelegate? = nil 

@IBAction func buttonPressed(_ sender: Any) { 
     delegate?.shouldScrollToPage1() 
    } 
} 

:あなたの子供のビューコントローラで

あなたが親であなたのChildViewControllerをインスタンス化するとき

extension ParentViewcontroller: ChildViewControllerDelegate{ 

func shouldScrollToPage1() 
//Do you sroll here 
} 

} 

はちょうどそれを追加します。

viewControllerA.delegate = self 
+0

しかしこの方法では、親ビューコントローラを子ビューコントローラのそれぞれのデリゲートにする必要はありませんか? –

+0

はい、そうです。私はあなたがあなたの解決策を見つけたのを見ました、それはいいです;) – Matthias

関連する問題