使用Storyboard,交互和查看问题的容器视图

时间:2012-11-18 18:10:55

标签: ios uiview uiviewcontroller storyboard parent-child

我一直试图以iPad仪表板方式并排显示两个简单容器的View布局。

我一直在阅读大量的例子,当然还有视图控制器的Apple View Controller参考资料,但总的来说,我有一个最奇怪的问题,希望有一个简单的解释。

我已经并排添加了两个视图容器,每个容器都包含一个具有不同背景颜色的视图控件,一个圆形矩形按钮和一个标签。为了测试目的,我还在“mainViewController”中添加了一个Round Rect按钮。

如此直接而简单。每个视图都被加载到容器视图中,但是我不能与它们中的任何一个进行交互(当点击按钮时,没有发生,没有蓝色突出显示,所以这不是委托的问题或是否接收到按钮的任何动作,因为没有这样的实现)。然而,点击我放在“mainViewController”中的按钮,拿着两个容器,可以完美地工作(一如既往地闪烁蓝色)。另一个奇怪的事情是容器视图上没有显示背景颜色?!只有按钮和标签。

计划如下:

文件: ViewController.h和.m(是“mainViewController”) sidebarViewController.h和.m(这些文件没有改变,UIViewController) resultsViewController.h和.m(这些文件没有改变,UIViewController) AppDelegate.h和.m(无变化) 故事板

ViewController.h,创建并连接到Storyboard中每个容器视图的出口。

#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

故事板标识符设置为storybar中的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,并且首先按顺序添加了addChildViewController语句)

好的,所以我的怀疑当然是它与视图层次结构有关,视图位于rootViewController视图的“后面”,因此只显示不可点击。需要在App委托中完成什么(如果有的话)才能使其工作?或者我在这段代码中做了别的错误吗?

编辑:发现可能出错的另一个线索:当我为故事板禁用“自动布局”时,视图显示并工作(!)但完全失真,但现在至少我得到正确的背景颜色和按钮在工作中。任何人都知道如何解决这个问题而不禁用自动布局?因为我想我必须以编程方式完成我的所有布局呢? :(

非常感谢,

1 个答案:

答案 0 :(得分:2)

您拥有的所有代码都是不必要的,而且可能是导致您出现问题的原因。在IB中添加容器视图时,它会自动为您创建这些嵌入式视图控制器(并将它们调整为容器视图的大小)。你有那些吗?您需要做的就是将它们的类更改为子类视图控制器的类。如果需要从“主”视图控制器访问这些控制器,可以从childViewControllers属性获取对它们的引用。

相关问题