我一直在阅读大量的例子,当然还有视图控制器的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
故事板标识符设置为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,并且首先按顺序输入addChildViewController语句)
好吧,我的怀疑当然是它与视图层次结构有关,视图位于rootViewController视图的“后面”,因此只显示不可点击.需要在App委托中完成什么(如果有的话)才能使其工作?或者我在这段代码中做了别的错误?
编辑:发现可能出错的另一个线索:当我为故事板禁用“自动布局”时,视图显示并工作(!)但完全失真,但现在至少我得到正确的背景颜色并且按钮正在工作.任何人都知道如何解决这个问题而不禁用自动布局?因为我想我必须以编程方式完成所有布局呢?