2012-01-16 66 views
1

我正在开发IOS RPG的过程。这个游戏是由一个标签栏控制的,并且标签栏中的每个视图控制器都有一个通用的“标题”,位于屏幕的顶部并显示关于该玩家的信息。ViewController同时具有来自笔尖的多个视图

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

问题:

1)你如何添加从单独的笔尖两种观点的单一视图控制器。

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

谢谢。

回答

1

您可以通过NSBundle上的loadNibNamed:owner:options:函数加载笔尖。它将返回的是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]; 
+0

为什么这是downvoted? – ColdLogic 2013-02-12 18:19:03

+0

这工作,正是我一直在寻找。 – 2013-04-11 06:01:09

0

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

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

根据您要加载任何厦门国际银行,将名称,而不是“yourNibName”的。希望有所帮助。

+0

注意,此装载来自一个视图控制器一个笔尖,而不是一个视图。 – ColdLogic 2012-01-16 15:49:21

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

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

  2. 滚动的观点是,你需要有充分了解工作野兽,但你像其他视图一样添加视图。重要的是他们有一个contentSize属性可以比他们的框架的大小更大。我通常使用我想要管理ScrollView下所有视图的大小的单个视图。祝你好运!

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);