ViewController一次有来自笔尖的多个视图

时间:2012-01-16 15:38:19

标签: iphone ios xcode

我正在开发IOS RPG。此游戏由标签栏控制,标签栏中的每个视图控制器都有一个共同的“标题”,位于屏幕顶部并显示有关播放器的信息。

然而,屏幕的其余部分将显示许多不同视图中的一个。每个视图控制器将负责在“标题”视图下方显示多个不同的“视图”。此外,许多这些视图都需要可滚动,因为它们不适合屏幕的范围。

问题:

1)如何将单独的nib中的两个视图添加到单个视图控制器。

2)如何在滚动视图中仅嵌入其中一个视图。

谢谢。

4 个答案:

答案 0 :(得分:1)

您可以通过loadNibNamed:owner:options:上的NSBundle功能加载笔尖。它将返回的是nib中所有对象的数组(当您在界面构建器中创建nib时,您在左侧看到的列表)。如果您查看的是nib中对象列表中的第一项,那么它是该数组第0个索引处的对象。

NSArray *objects1 = [[NSBundle mainBundle] loadNibNamed:@"View1Nib" owner:self options:nil];
UIView *customView1 = [objects1 objectAtIndex:0];

NSArray *objects2 = [[NSBundle mainBundle] loadNibNamed:@"View2Nib" owner:self options:nil];
UIView *customView2 = [objects2 objectAtIndex:0];

UIScrollView *scroll = [[[UIScrollView alloc] init] autorelease];
[scroll addSubview:customView2];

[[self view] addSubview:customView1];
[[self view] addSubview:scroll];

答案 1 :(得分:1)

如果我在笔尖中有多个视图,我会使用恢复标识符,而不是依赖于数组的顺序,并执行以下操作:

UINib *nib = [UINib nibWithNibName:@"Nib" bundle:nil];
NSArray* views = [nib instantiateWithOwner:self options:nil];
assert(views.count == 3);
UIView *aView;
UIView *anotherView;
UIView *yetAnotherView;
for (UIView* view in views) {
    if ([view.restorationIdentifier isEqualToString:@"AViewId"]) {
        aView = (SettingsCell *) view;
    }
    else if([view.restorationIdentifier isEqualToString:@"AnotherViewId"]) {
        anotherView = (SettingsCell *) view;
    }
    else if([view.restorationIdentifier isEqualToString:@"YetAnotherViewId"]) {
        yetAnotherView = (HeaderView *)view;
    }
}
assert(aView && anotherView && yetAnotherView);

答案 2 :(得分:0)

制作视图控制器时,如果选择自动生成xib,则默认情况下其视图插座将连接到视图。现在,创建一个具有不同名称的新xib,并将其文件所有者作为视图控制器类。此外,手动连接视图插座。 现在,调用init方法:

YourViewController *x = [[YourViewController alloc] initWithNibName: @"yourNibName" bundle:nil];

根据您要加载的任何xib,放置名称而不是“yourNibName”。希望有所帮助。

答案 3 :(得分:0)

  1. 您需要引用这两个视图,并且您可以正常[view addSubview:secondView];。至于如何获取xib中与视图控制器无关的视图的引用,有几种方法,但您选择的方式取决于该视图是否已在应用程序的其他位置实例化。我打赌你已经在其他地方实例化了那个视图,你只想添加它。如果是我,我会为该视图的父级使用单例,所以我可以做类似的事情:

    [view addSubview:[ParentClass parentClassSharedInstance] viewToAdd]];

  2. 滚动视图是您需要完全理解的野兽,但您可以像其他任何视图一样向其添加视图。重要的一点是,它们的contentSize属性可能比帧的大小更大。我通常使用我想管理ScrollView下所有视图的单个视图。祝你好运!