2012-11-18 20 views
8

我一直在試圖用兩個簡單的容器以iPad儀表板的方式實現View佈局。使用Storyboard,交互和查看問題的容器視圖

我一直在閱讀大量的例子,當然,視圖控制器和一般的Apple View Controller參考,但我有一個最奇怪的問題,希望有一個簡單的解釋。

我已經並排添加了兩個視圖容器,每個視圖容納一個具有不同背景色的視圖控制器,一個圓形矩形按鈕和一個標籤。爲了測試的目的,我還在「mainViewController」中添加了一個Round Rect按鈕。

所以相當簡單直接。每個視圖都被加載到容器視圖中,但是我無法與其中任何一個進行交互(當單擊按鈕時,沒有任何事情發生,沒有藍色突出顯示,所以它不是委託問題或從按鈕接收任何操作的問題,或者不是沒有這樣的實現)。然而,點擊我放入裝有兩個容器的「mainViewController」的按鈕,完美地工作(一如既往地閃爍藍色)。另一個奇怪的事情是背景顏色沒有顯示在容器視圖??只有按鈕和標籤。

方案如下:

文件: ViewController.h和.M(是 「mainViewController」) sidebarViewController.h和.M(沒有在這些文件改變,UIViewController中) resultsViewController.h和.M (沒有在這些文件中改變,UIViewController中) AppDelegate.h和.M(無變化) 故事板

ViewController.h,創建並連接到故事板的每個容器視圖網點。

#import <UIKit/UIKit.h> 
#import "sidebarViewController.h" 
#import "resultsViewController.h" 

@interface ViewController : UIViewController 

@property (nonatomic, weak) IBOutlet UIView *sidebarView; 
@property (nonatomic, weak) IBOutlet UIView *resultsView; 


@end 

故事板標識符設置爲storyboard中的sidebarViewcontroller和Resultsviewcontroller。

ViewController.m,一切按章進行(或可能不會,但什麼,至少它看起來像我)

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize sidebarView,resultsView; 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 

UIStoryboard *storyboard = self.storyboard; 
sidebarViewController *sideVC = [storyboard instantiateViewControllerWithIdentifier:@"SidebarViewController"]; 
resultsViewController *resultsVC = [storyboard instantiateViewControllerWithIdentifier:@"ResultsViewController"]; 

//sidebarViewController *sideVC = [[sidebarViewController alloc]init]; 
//rresultsViewController *resultsVC = [[resultsViewController alloc]init]; 
[self addChildViewController:sideVC]; 
sideVC.view.frame = self.sidebarView.frame; 
[self.sidebarView addSubview:sideVC.view]; 
self.sidebarView.userInteractionEnabled = YES; 
[sideVC didMoveToParentViewController:self]; 

[self addChildViewController:resultsVC]; 
resultsVC.view.frame = self.resultsView.frame; 
[self.resultsView addSubview:resultsVC.view]; 
self.resultsView.userInteractionEnabled = YES; 
[resultsVC didMoveToParentViewController:self]; 

} 

(我有過self.xxxxView爲好,也有首先按順序添加ChildViewController語句)

好吧,我的懷疑當然是它與視圖層次有關,視圖位於rootViewController視圖的「後面」,因此只顯示爲不可點擊。在App代理中需要做些什麼(如果有的話)才能使其發揮作用?或者我在這段代碼中做了其他錯誤?

編輯:發現了另一個線索,可能是錯誤的:當我禁用故事板的「自動佈局」時,視圖顯示並工作(!)但完全失真,但現在至少我得到正確的背景色,按鈕正在工作。任何人都知道如何解決這個問題而不禁用自動佈局?因爲我想我必須以編程方式完成我所有的佈局呢? :(

非常感謝,

回答

2

你把所有的代碼是不必要的,而且可能是什麼原因造成的問題。當你加入IB你的容器的觀點,它會自動爲你創建的內嵌視圖控制器(和將它們的大小調整爲容器視圖的大小)你有沒有得到這些?你所需要做的就是將它們的類改爲你的子類視圖控制器的類。如果您需要從「主」視圖控制器訪問這些控制器,則可以從childViewControllers屬性獲取對它們的引用。

+0

感謝您的及時回覆。是的,我得到這些,那些當然是開箱即用,問題是我想以編程方式切換這些視圖(其他控制器有新的子控制器)。我還沒有看到一種方法來改變「嵌入Seques」,所以我可以根據要求嵌入不同的控制器,如果這些不是嵌入式控制器的孩子? –

+0

@AndreasKlintberg,sideBarViewController和resultsViewController是您在IB中自動獲得的2個控制器,還是您試圖切換到的那些控制器? – rdelmar

+0

沒有這些是我創建的新的,因爲我不想使用嵌入segues(因爲這些不能用編程方式處理,或者至少我還沒有找到對此的引用?) –