从子UIVIewController控制UIScrollView

时间:2016-11-22 21:37:57

标签: ios iphone swift uiviewcontroller uiscrollview

所以我试图让UIViewControllers的Snapchat风格能够在它们之间滑动。我的滑动部分工作正常,但我也希望能够通过按下按钮在视图控制器之间移动,这就是我摔倒的地方。

我有一个带有UIScrollView的父视图控制器或容器视图控制器,然后我将UIViewControllers添加到它和滚动视图,如下所示:

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

每个人都是如此。

现在的问题是UIScrollView位于Container视图中,所以当我按下ViewControllerA中的按钮时,我想在Container视图中调用一个函数来移动滚动视图。

我打算使用一个委托,但我认为我说我需要为每个子视图编写一个单独的委托,这对我来说似乎有点代码味道。

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

想出办法。

我创建了另一个View Controller并将我的协议放在那里。然后,他们不再使我的子视图控制器UIViewController的子类,它们现在是我的新SliderViewController的子类,可以调用它所包含的委托函数

答案 1 :(得分:0)

您的parentViewController应该是childViewControllers的委托。

在您的子视图控制器中:

protocol ChildViewControllerDelegate {
func shouldScrollToPage1()
}

class ChildViewController {

weak var delegate: ChildViewControllerDelegate? = nil

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

在ParentViewController中:

extension ParentViewcontroller:  ChildViewControllerDelegate{

func shouldScrollToPage1()
//Do you sroll here
}

}

在父实例中实例化ChildViewController时,只需添加:

viewControllerA.delegate = self