我一直在试图用两个简单的容器以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(因为这些不能用编程方式处理,或者至少我还没有找到对此的引用?) –