将另一个 nib 加载到 viewController
Posted
技术标签:
【中文标题】将另一个 nib 加载到 viewController【英文标题】:loading another nib into a 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];
【问题讨论】:
【参考方案1】:这里显然有些混乱。
nib 只是一个包含 (*) 对象的存档,包括(通常)一个或多个视图对象(在您的情况下为 UIView
)。您不会“将笔尖加载为子视图”。您实例化 nib,可能会将其交给 UIViewController
来拥有和管理它,并将 nib 中引用的视图添加到您的视图层次结构中。
您对第一行代码所做的就是创建一个具有给定帧大小的通用 UIView
实例,并将其插入到任何 [self view] 中。在您所写的内容中没有实际上引用了 nib,即使您将视图错误地命名为 nib。
对于你正在做的事情,我可能会选择两条路线之一:
-
将视图作为单独的***视图添加到原始 nib 中,并将其连接到
IBOutlet
。然后,您可以在您设置为 nib 的文件所有者的公共 UIViewController
实例中轻松显示菜单。
有一个单独的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 子类来管理您的菜单。这以模块化的形式具有一些理论上的优势。请看我的回复。
每个视图都有一个视图控制器。当你按下按钮等时,这就是你告诉它做什么的方式。以上是关于将另一个 nib 加载到 viewController的主要内容,如果未能解决你的问题,请参考以下文章