2

我想要實現的是在界面構建器中設計UI的「共享」部分,並使用子視圖控制器向用戶顯示內容。這可能聽起來像試圖重塑UINavigationController,但事實並非如此。事實上,整個事物都嵌入其中。在導航控制器中添加常見視圖

它看起來像這樣: example view

現在,我想要做的就是這個BaseViewController的變化子視圖控制器和顯示在導航欄中這一變化,讓所有的它的功能仍然存在。

我嘗試添加這樣的方法:

+ (UIViewController *)baseViewControllerWithChild:(UIViewController *)child { 
    BaseViewController *base = [BaseViewController new]; 
    [base addChildViewController:child]; 
    child.view.frame = base.childViewControllerContainer.frame; 
    [base.view addSubview:child.view]; 
    [child didMoveToParentViewController:base]; 

    return base; 
} 

,然後用它是這樣的:

- (void)didTouch:(UIButton *)sender { 
    [self.parentViewController.navigationController pushViewController:[BaseViewController baseViewControllerWithChild:[DummyViewController new]] animated:YES]; 
} 

(注:DummyViewController正是 - 一個虛擬VC,做只是爲了測試,只有在viewDidLoad中設置了背景顏色)

此方法是第一個子視圖控制器中按鈕的處理程序。到現在爲止還挺好。不幸的是,結果並不如預期 - 推視圖控制器是黑色的。在杉杉我認爲這是因爲BaseViewController被設計在storyboard和最初設置爲導航控制器的rootViewController。將它移動到xib文件和代碼設置不適合我,因爲您不能在xib中添加Container View。總的來說,我想要有一個由BaseViewController類管理的基本設計,內容將被添加爲childViewController。推動一個新的視圖控制器將是對這些childViewController的行動的結果,並應相應地更新導航堆棧。

而且,整個事情需要與iOS 7

任何幫助的工作就如何努力實現這一目標是非常感謝!

+0

你說,「BaseViewController是在故事板中設計的」。你應該使用故事板來實例化它,而不是創建一個獨立的對象嗎? –

+0

我也試過讓它按照'xib'設計,但它並沒有幫助我。此外,它沒有通過'[UIStoryboard instatiateViewController ...]'實例化,但是查看'new'(或'alloc init'),因爲它是同樣的事情。如果需要,我可以在代碼中設計視圖,但我希望儘可能地使用界面構建器。 – Losiowaty

+0

嘗試使用'instantiateViewControllerWithIdentifier:'。這實際上不是「同一件事」。 –

回答

0

問題產生於base.childViewControllerContainernil - 這是由於事實上視圖控制器的view屬性被懶惰地加載引起的。在訪問base.childViewControllerContainer之前添加[base view]解決了這個問題,但我不確定這是否是唯一的,最好的方法。

相關問題