【问题标题】:loading another nib into a viewController将另一个 nib 加载到 viewController
【发布时间】:2012-07-02 22:08:47
【问题描述】:

我有一个包含自己的 .nib 文件的 ViewController,我想将另一个 .nib 加载到这个 ViewController 中,这将是一个菜单......但是我只是不确定如何做到这一点,并希望一些帮助。

在向您展示代码之前,我将解释我所做的工作。

  • 我有一个带有 Nib 的 UIViewController,它是我的主视图。
  • 我创建了另一个 nib,它将作为一个菜单显示为主视图的子视图
  • 我已将此 nibs 类更改为主视图的 UIViewController,以便它可以看到所有相同的 IBAction 和插座。
  • 然后我运行下面的代码尝试将单独的笔尖加载为子视图,但是当我运行它时,另一个笔尖的子视图没有显示出来......

        jumpBarPortraitNib = [[UIView alloc] initWithFrame:CGRectMake(0.0, 50.0, 320.0, 367.0)];
    
    
    
        // add jumpbar container to view
        [self.view insertSubview:jumpBarPortraitNib belowSubview:actionTabBar];
    

【问题讨论】:

    标签: iphone ios xib nib


    【解决方案1】:

    这里显然有些混乱。

    nib 只是一个包含 (*) 对象的存档,包括(通常)一个或多个视图对象(在您的情况下为 UIView)。您不会“将笔尖加载为子视图”。您实例化 nib,可能会将其交给 UIViewController 来拥有和管理它,并将 nib 中引用的视图添加到您的视图层次结构中。

    您对第一行代码所做的就是创建一个具有给定帧大小的通用 UIView 实例,并将其插入到任何 [self view] 中。在您所写的内容中没有实际上引用了 nib,即使您将视图错误地命名为 nib。

    对于你正在做的事情,我可能会选择两条路线之一:

    1. 将视图作为单独的顶级视图添加到原始 nib 中,并将其连接到 IBOutlet。然后,您可以在您设置为 nib 的文件所有者的公共 UIViewController 实例中轻松显示菜单。
    2. 有一个单独的UIViewController 实例,它只管理菜单视图,您将使用它来使用@Aaron 提到的-initWithNibName: 实例化笔尖的内容。 (请注意,您不需要在外部设置框架;框架将作为视图的属性存档在 nib 中。)

    *:不是真的,但你可以这样想。

    【讨论】:

    • 好吧,从你所说的来看,我正在努力实现你在选项 1 中概述的内容。我已经设置了一个 IBOutlet UIView 并右键单击拖动到菜单视图(在界面生成器中)但它没有显示该代码..你认为我错过了什么?
    • 好答案。如果您刚刚开始使用这种类型的编程,您应该阅读this article,它在我开始时帮助我了解了很多基本概念。
    • @HurkNburkS 好的,假设您将您的财产/出口命名为“menuView”。然后你可以做一些简单的事情,比如[[self view] addSubview:[self menuView]]。
    • 刚刚实现 在原始 nib 中将视图添加为单独的顶级视图, 所以我现在正在使用我在另一个 nib 中完成的 IB 内容并添加它到 mainViewController nib.. 会看到它是怎么回事。
    • @HurkNburkS 好吧,不要将插座称为笔尖(因为它不是),并使用类似 @synthesize menuView = _menuView 的东西 - 并确保使用访问器方法 [self menuView] 而不是直接访问。
    【解决方案2】:

    你需要使用initWithNibName,然后在下面一行设置frame:

    UIViewController * jumpVC = [[UIViewController alloc] initWithNibName:@"jumpBarPortrait" bundle:nil];
    jumpVC.view.frame = //your frame
    

    【讨论】:

    • 或者,如果您将UIViewController 子类化,则将其替换为您的自定义类(如MyAwesomeViewController)。
    • 但是另一个笔尖没有 UIViewController....这是我有点困惑...
    • @HurkNburkS 您可以选择创建另一个 UIViewController 子类来管理您的菜单。这以模块化的形式具有一些理论上的优势。请看我的回复。
    • 每个视图都有一个视图控制器。当你按下按钮等时,这就是你告诉它做什么的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2015-03-19
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多