2016-11-22 61 views
0

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

我有在它一个UIScrollView父母或容器视图控制器,然后我添加UIViewControllers它和滚动视图如下:

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

等了每一个。

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

我要使用委托,但我觉得我说得对,我需要写上似乎有点像一个代码味道对我的每个子视图一个单独的委托。

所有帮助表示赞赏。

+0

我看来,像父/容器视图控制器将成为委托。你的每个孩子都会有一个代表财产,符合相同的协议,并且每个人都会指向同一个父代。 –

回答

1

想通了。

我创建了另一个视图控制器,并把我的协议放在那里。然后,而不是使我的子视图控制器UIViewController的子类,他们现在是我的新SliderViewController的子类,并可以调用它的代表功能

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 
+0

不过这样一来就我没有做父视图控制器我的孩子视图控制器中的每一个委托? –

+0

是的,你会的。我看到你找到了你的解决方案,这很好;) – Matthias

相关问题