所以我试图让UIViewControllers的Snapchat风格能够在它们之间滑动。我的滑动部分工作正常,但我也希望能够通过按下按钮在视图控制器之间移动,这就是我摔倒的地方。
我有一个带有UIScrollView的父视图控制器或容器视图控制器,然后我将UIViewControllers添加到它和滚动视图,如下所示:
self.addChildViewController(ViewControllerA)
self.scrollView!.addSubview(ViewControllerA.view)
ViewControllerA.didMove(toParentViewController: self)
每个人都是如此。
现在的问题是UIScrollView位于Container视图中,所以当我按下ViewControllerA中的按钮时,我想在Container视图中调用一个函数来移动滚动视图。
我打算使用一个委托,但我认为我说我需要为每个子视图编写一个单独的委托,这对我来说似乎有点代码味道。
所有帮助表示赞赏。
答案 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