8

我一直在尝试以 iPad 仪表板的方式并排实现两个简单容器的视图布局。

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

我并排添加了两个视图容器,每个容器都将容纳一个具有不同背景颜色的视图控制器、一个圆形矩形按钮和一个标签。出于测试目的,我还在“mainViewController”中添加了一个圆形矩形按钮。

所以相当直接和简单。每个视图都加载到容器视图中,但是我无法与它们中的任何一个进行交互(单击按钮时,什么都没有发生,没有蓝色突出显示,因此这不是委托问题或是否收到来自按钮的任何操作,因为没有类似的实施)。但是,单击我放在“mainViewController”中的按钮,该按钮包含两个容器,可以正常工作(一如既往地闪烁蓝色)。另一个奇怪的事情是容器视图上也没有显示背景颜色?!只有按钮和标签。

程序如下:

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

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

#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

情节提要标识符设置为情节提要中的侧边栏视图控制器和结果视图控制器。

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 委托中完成什么(如果有的话)才能使其正常工作?或者我在这段代码中做错了什么?

编辑:发现另一个可能出错的线索:当我为情节提要禁用“自动布局”时,视图显示并工作(!)但完全扭曲,但现在至少我得到正确的背景颜色并且按钮正在工作。有谁知道如何在不禁用自动布局的情况下解决这个问题?因为我想我必须以编程方式完成所有布局?:(

非常感谢,

4

1 回答 1

2

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

于 2012-11-18T18:20:12.427 回答