2016-11-24 49 views
2

我有一個頁面視圖控制器,它使用普通的UIPageViewController方法在視圖控制器之間轉換。裏面呈現視圖控制器(假設當前視圖控制器)中的一個,我添加子視圖控制器到一個名爲containerView像這樣子視圖:在UIPageController的當前頁面呈現子視圖控制器

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let child = storyboard.instantiateViewController(withIdentifier: "child") 
    self.addChildViewController(child) 
    child.view.frame = self.containerView.bounds 
    self.containerView.addSubview(child.view) 
    child.didMove(toParentViewController: self) 

視圖控制器呈現containerView內,但它是唯一半互動。例如,假設子視圖控制器有一個滑塊,它用滑塊的值更新標籤。滑動滑塊時,滑塊將在containerView內部可視化移動,但不會更新標籤(連接到滑塊的IBAction不會運行)。當視圖控制器正常顯示時(使用正常繼續的全屏幕),此行爲正常工作。

任何想法?

+0

它非常奇怪......所以在調試時,slider-changed的委託方法不會被調用? –

+0

實際上它會被觸發,但是標籤不會更新。我在滑塊IBAction中放置了一個斷點,它會被調用,但是標籤的文本不會改變'label.text = String(slider.value)',就好像當視圖控制器正常顯示時一樣,我甚至試圖改變'self.view'的背景色,並且工作正常看看是否有效 –

+0

你需要在_much_ more p中描述情況p爲了得到一個很好的答案,請重新調整細節。否則,你只是在浪費你剛剛花在賞金上的代表。很難說出什麼問題。但是,請注意多個視圖控制器級別之間的通信(在父視圖控制器中的視圖控制器中查看)是一個非常棘手的問題!我在這裏有一個很長的討論可能會給你一些想法的選項:http://stackoverflow.com/a/33458977/341994 – matt

回答

0

好像故事板視圖控制器正在發生什麼事情,因爲我可以刪除滑塊並添加新的滑塊,並且該功能在UIPageViewController頁面內正常工作。

0

也許是因爲你沒有爲子子視圖設置約束。 當容器視圖大小發生變化時 - 您的子視圖超出範圍。 您可以查看其是否在Xcode查看調試功能(當你的應用程序在屏幕上的問題,你可以捕捉所有視圖(菜單調試 - >查看debugging->捕獲視圖層次),調查發生了什麼

child.view.frame = self.containerView.bounds 
self.containerView.addSubview(child.view) 
// need to add constraint, because if container view resized, child view frame not changed 
child.view.autoresizinkMask = [.flexibleHeight, .flexibleWidth] 
child.view.translatesAutoresizingMaskIntoConstraints = true 
child.didMove(toParentViewController: self) 
相關問題