【问题标题】:Container view using Storyboard, interaction and view issues使用 Storyboard 的容器视图、交互和视图问题
【发布时间】:2012-11-06 17:42:24
【问题描述】:

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

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

非常感谢,

【问题讨论】:

    标签: ios uiview uiviewcontroller storyboard parent-child


    【解决方案1】:

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

    【讨论】:

    • 感谢您的及时回复。是的,我得到了这些,而且这些当然是开箱即用的,问题是我想以编程方式切换这些视图(到具有新子控制器的其他控制器)。我还没有看到改变“嵌入序列”的方法,所以我可以根据要求嵌入不同的控制器,如果这些不是嵌入式控制器的孩子?
    • @AndreasKlintberg,sideBarViewController 和 resultsViewController 是您在 IB 中自动获得的 2 个控制器,还是您尝试切换到这些控制器?
    • 不,这些是我创建的新的,因为我不想使用嵌入转场(因为这些不能以编程方式处理,或者至少我还没有找到对它的引用?)
    • 那么,您不是在使用自动获得的嵌入式吗?你删除了那些(实际上,我不知道他们为什么称这些 segues - 他们不会去任何地方,我会称他们为嵌入关系)?
    • 不完全是,创建了新的。现在用新线索编辑了我的问题。是的,我猜他们也叫那个:)
    猜你喜欢
    • 2015-06-25
    • 1970-01-01
    • 2016-12-15
    • 2014-09-26
    • 2013-07-25
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    相关资源
    最近更新 更多