2012-11-18 18 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(因为这些不能用编程方式处理,或者至少我还没有找到对此的引用?) –