Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 一次具有多个NIB视图的ViewController_Iphone_Ios_Xcode - Fatal编程技术网

Iphone 一次具有多个NIB视图的ViewController

Iphone 一次具有多个NIB视图的ViewController,iphone,ios,xcode,Iphone,Ios,Xcode,我正在开发一个IOS rpg。这个游戏是由一个标签栏控制的,标签栏中的每个视图控制器都有一个公共的“标题”,位于屏幕顶部,显示关于玩家的信息 但是,屏幕的其余部分将显示许多不同视图中的一个。每个视图控制器将负责在“标题”视图下显示多个不同的“视图”。此外,这些视图中的许多都需要可滚动,因为它们不适合屏幕的限制 问题: 1) 如何将两个视图从单独的NIB添加到单个视图控制器 2) 如何在滚动视图中仅嵌入其中一个视图 谢谢。制作视图控制器时,如果选择自动生成xib,默认情况下,其视图出口将连接到视图

我正在开发一个IOS rpg。这个游戏是由一个标签栏控制的,标签栏中的每个视图控制器都有一个公共的“标题”,位于屏幕顶部,显示关于玩家的信息

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

问题:

1) 如何将两个视图从单独的NIB添加到单个视图控制器

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


谢谢。

制作视图控制器时,如果选择自动生成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而不是视图加载视图控制器。