2016-11-22 62 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

相關問題