我一直在試圖用兩個簡單的容器以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代理中需要做些什麼(如果有的話)才能使其發揮作用?或者我在這段代碼中做了其他錯誤?
編輯:發現了另一個線索,可能是錯誤的:當我禁用故事板的「自動佈局」時,視圖顯示並工作(!)但完全失真,但現在至少我得到正確的背景色,按鈕正在工作。任何人都知道如何解決這個問題而不禁用自動佈局?因爲我想我必須以編程方式完成我所有的佈局呢? :(
非常感謝,
感謝您的及時回覆。是的,我得到這些,那些當然是開箱即用,問題是我想以編程方式切換這些視圖(其他控制器有新的子控制器)。我還沒有看到一種方法來改變「嵌入Seques」,所以我可以根據要求嵌入不同的控制器,如果這些不是嵌入式控制器的孩子? –
@AndreasKlintberg,sideBarViewController和resultsViewController是您在IB中自動獲得的2個控制器,還是您試圖切換到的那些控制器? – rdelmar
沒有這些是我創建的新的,因爲我不想使用嵌入segues(因爲這些不能用編程方式處理,或者至少我還沒有找到對此的引用?) –