Iphone 一次具有多个NIB视图的ViewController
我正在开发一个IOS rpg。这个游戏是由一个标签栏控制的,标签栏中的每个视图控制器都有一个公共的“标题”,位于屏幕顶部,显示关于玩家的信息 但是,屏幕的其余部分将显示许多不同视图中的一个。每个视图控制器将负责在“标题”视图下显示多个不同的“视图”。此外,这些视图中的许多都需要可滚动,因为它们不适合屏幕的限制 问题: 1) 如何将两个视图从单独的NIB添加到单个视图控制器 2) 如何在滚动视图中仅嵌入其中一个视图Iphone 一次具有多个NIB视图的ViewController,iphone,ios,xcode,Iphone,Ios,Xcode,我正在开发一个IOS rpg。这个游戏是由一个标签栏控制的,标签栏中的每个视图控制器都有一个公共的“标题”,位于屏幕顶部,显示关于玩家的信息 但是,屏幕的其余部分将显示许多不同视图中的一个。每个视图控制器将负责在“标题”视图下显示多个不同的“视图”。此外,这些视图中的许多都需要可滚动,因为它们不适合屏幕的限制 问题: 1) 如何将两个视图从单独的NIB添加到单个视图控制器 2) 如何在滚动视图中仅嵌入其中一个视图 谢谢。制作视图控制器时,如果选择自动生成xib,默认情况下,其视图出口将连接到视图
谢谢。制作视图控制器时,如果选择自动生成xib,默认情况下,其视图出口将连接到视图。现在,创建一个新的具有不同名称的xib,并使其文件所有者成为视图控制器类。另外,手动连接视图插座。 现在,调用init方法:
YourViewController *x = [[YourViewController alloc] initWithNibName: @"yourNibName" bundle:nil];
根据要加载的xib,将名称替换为“yourNibName”。希望对您有所帮助。您可以通过
loadNibNamed:owner:options:
函数在NSBundle
上加载nib。它将返回nib中所有对象的数组(在interface builder中创建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];
[view addSubview:secondView]代码>正常。至于如何获得对xib中与视图控制器无关的视图的引用,有几种方法,但您选择哪种方法将取决于该视图是否已在应用程序的其他位置实例化。我打赌你已经在别处实例化了这个视图,你只想添加它。如果是我,我会使用单例作为该视图的父视图,这样我就可以执行以下操作:
[view addSubview:[ParentClass parentClassSharedInstance]viewToAdd]代码>
contentSize
属性,该属性可以大于帧的大小。我通常使用一个大小为我想要管理ScrollView下所有视图的视图。祝你好运如果nib中有多个视图,我将使用恢复标识符,而不是依赖阵列的顺序,并执行以下操作:
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);
请注意,这将从nib而不是视图加载视图控制器。