2013-12-10 27 views
0

我有一个标题,我想将其添加到我的程序中的每个视图中。而不是手动做到这一点,我一直在试图找到一种方法来在每个被加载的视图上面插入这个“标题视图”。在下面的例子中,我尝试使用insertSubView方法,但这种插入整个视图,而不是只是头内容的点点我感兴趣的向应用程序中的每个视图添加标题视图

[self.view insertSubview:self.headerController.view aboveSubview:self.indexController.view]; 
[self.view insertSubview:self.indexController.view atIndex:0]; 

有谁知道如何正确地做到这一点?我使用的Xcode 5

回答

0

我建议创建一个基本视图从中您将从中为每个需要此标头的视图子类。

你可以有一个BaseView.h那会是什么样子:

@interface BaseView : UIView 
@property (nonatomic) UIView *someHeaderView; 
@end 

和执行(。米)看起来像这样:

@implementation BaseView 
- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.headerView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, CGRectGetWidth(frame), 150.0)]; 
     [self.view addSubview:self.headerView]; 
    } 
    return self; 
} 
@end 

然后让每个需要一个头的子类的看法吧:

@interface SomeViewRequiringHeader : BaseView 
@end 
+0

这就是我最终做的,唯一不同的是我的UIViewController的子类,然后我滑下它的视图的位置,但它最终是相同的想法。 –

0

尝试扭转二者的顺序:

[self.view insertSubview:self.indexController.view atIndex:0]; 
[self.view insertSubview:self.headerController.view aboveSubview:self.indexController.view]; 

而且,由于headerController是一个UIViewController,它可能有全屏的默认大小笔尖文件。如果只想达到某个高度,则必须使用适当的高度修改该笔尖文件。

1

您在其他视图控制器的视图中插入了headerControllerindexController的视图。但是,一般来说,您需要小心保持视图层次结构与视图控制器层次结构同步。 WWDC 2011视频Implementing UIViewController Containment中对此的重要性进行了详细讨论。

所以,通常你会实例化适当的indexControllerheaderController,叫addChildViewController,添加子视图,然后调用didMoveToParentViewController每个这两个视图控制器。有关更多信息,请参阅iOS版的“视图控制器编程指南”中的Creating Custom Container View Controllers部分。但是你的应用程序的视图控制器可能会做这样的事情:

HeaderController *headerController = ...      // instantiate however is appropriate 
[self addChildViewController:headerController];   
headerController.view.frame = [self frameForHeaderController]; // define the frame/constraints as appropriate 
[self.view addSubview:headerController]; 
[headerController didMoveToParentViewController:self]; 

然后你会重复这一过程,为indexController

只要确保(除了自定义容器调用之外)设置视图控制器框架的frame或定义自动布局约束来决定视图的位置(就像您对任何以编程方式添加的视图所做的那样)。如果你没有指定框架,它可能最终会成为CGRectZero,这显然不是你想要的。

虽然你可能会考虑翻转。制作一个自定义容器视图控制器,其中包含您的标题和任何其他UI元素,这些元素可以保留每个视图然后将你的应用程序的视图控制器作为该容器“父”视图控制器的子控制器。如果标题控制器的视图或索引控制器的视图在各种内容视图控制器之间导航您的应用程序,这种结构可能更有意义。

我想如果你看到WWDC video和/或查看Creating Custom Container View Controllers,这将会更有意义。

+0

感谢。我刚读过这篇文章。我称之为“自我”的实际控制者可以说是我的容器。为了形成一个新的页面,我试图让页眉和索引视图出现在它的顶部以形成索引页面。我认为我的问题是控制标题视图的大小。我仍在玩框架设置。我会让你知道,如果这个工程,但迄今为止,没有任何关于控制视图大小是直观的。 –

+0

@UsmanMutawakil通常,在添加子视图控制器(并执行这些包含调用)时,会在NIB/Storyboard(历史上称为“容器”视图)上使用占位符“UIView”。然后,当以编程方式添加子视图控制器视图时,我将它添加到该容器视图中,并将视图控制器视图的“框架”设置为与容器视图的“边界”相同。它让我摆脱了手动计算视图控制器视图的“框架”的情况。如果您在iOS 6及更高版本中使用故事板,则存在具有嵌入segue的容器视图对象(更容易)。 – Rob

相关问题