你可以将NIB文件换成已经在屏幕上的UIViewController吗?

Ada*_*dam 0 iphone uiviewcontroller nib

例如:

  1. 使用"nib-v1"使用initWithNibName创建一个新的UIVC
  2. 显示它,例如使用[(UINavigationController)nav pushViewController:myVC]
  3. 将myVC正在使用的NIB更改为"nib-v2"

据我所知,这是许多应用程序的应用程序设计的"正确"方法,在分析信息时,您需要两个稍微不同的UI屏幕来显示信息.

例如,您的大多数页面都是文本,但其中一些页面也有图像(想想RSS阅读器,其中一些RSS条目有文本+图像,有些只有文本).

我之前通过使用一个NIB文件和第二个不可见的名为UIView的实例处理了这个问题,我在第一个实例的顶部分层,并根据上下文使用"隐藏"标志打开/关闭.

但这显然是错误的,浪费了记忆.

但是,我看不到从NIB文件"重新加载"视图的明显方法.我猜我想以某种方式重现initWithNibName所做的魔术?

我怀疑这是可能的,但我敢肯定,如果你以"错误的方式"做到这一点,那么该应用程序将简单地崩溃.

bsh*_*ley 7

你总是可以表演

[[NSBundle mainBundle] loadNibNamed:@"FileName" owner:viewController options:nil]];
Run Code Online (Sandbox Code Playgroud)

但如果你不确定自己在做什么,这无疑会让事情变得一团糟,特别是如果view这两个笔尖都连接起来的话

您应该重新设计视图控制器层次结构,以在从两个不同的nib文件加载的两个不同控制器之间进行交换.


或者,您可以让控制器管理从与其无关的不同文件加载的交换视图nibName.在这种情况下,您可以按上述方式加载它们.而且你会希望他们的插座(例如,subviewOnesubviewTwo)连接在不同的笔尖.