Ios 使用故事板的容器视图、交互和视图问题

Ios 使用故事板的容器视图、交互和视图问题,ios,uiview,uiviewcontroller,storyboard,parent-child,Ios,Uiview,Uiviewcontroller,Storyboard,Parent Child,我一直在尝试用两个简单的容器并排以iPad仪表板的方式实现视图布局 我已经阅读了很多例子,当然还有苹果的视图控制器参考,但是我有一个非常奇怪的问题,希望能有一个简单的解释 我已经并排添加了两个视图容器,每个容器将容纳一个具有不同背景颜色的viewcontroller、一个圆形Rect按钮和一个标签。出于测试目的,我还在“mainViewController”中添加了一个圆形Rect按钮 所以非常直接和简单。每个视图都会加载到容器视图中,但是我不能与它们中的任何一个交互(当单击按钮时,什么都不会发

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

我已经阅读了很多例子,当然还有苹果的视图控制器参考,但是我有一个非常奇怪的问题,希望能有一个简单的解释

我已经并排添加了两个视图容器,每个容器将容纳一个具有不同背景颜色的viewcontroller、一个圆形Rect按钮和一个标签。出于测试目的,我还在“mainViewController”中添加了一个圆形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
(我也有self.xxxxView,并且首先有addChildViewController语句)

好吧,我的怀疑当然是它与视图层次结构有关,视图在rootViewController视图后面,因此只显示不可单击。在应用程序代理中需要做什么(如果有什么)才能使其正常工作?或者我在这段代码中犯了什么错误

编辑:找到了另一个可能出错的线索:当我为故事板禁用“自动布局”时,视图显示并工作(!),但完全扭曲,但现在至少我得到了正确的背景颜色,按钮工作正常。有人知道如何在不禁用自动布局的情况下修复此问题吗?因为我想我必须按程序做所有的布局(


非常感谢,

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

感谢您的及时回复。是的,我得到了这些,当然这些都是现成的,问题是我想通过编程方式切换这些视图(切换到具有新子控制器的其他控制器)。我还没有找到更改的方法“嵌入顺序“如果不是嵌入式控制器的孩子,那么我可以根据请求嵌入不同的控制器?@AndreasKlintberg,sideBarViewController和resultsViewController是您在IB中自动获得的两个控制器,还是您正试图切换到的控制器?不,这些是我创建的新控制器,因为我不想使用嵌入序列(因为这些不能通过编程来处理,或者至少我还没有找到一个引用。)所以,你没有使用自动获得的嵌入关系?你删除了吗(事实上,我不知道他们为什么称它们为segues-它们不会去任何地方,我会称它们为嵌入关系)不完全正确,创建了新的。现在用新的线索编辑了我的问题。是的,我想他们也被称为:)
#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];

}