iphone - .nib 文件的多个版本

标签 iphone objective-c ios xcode xcode4

有没有办法让两个 .nib 文件同名?我正在使用 Xcode 4,并且我希望在不同的文件夹中拥有多个版本的界面,即: MainMenu.xib ,因此我可以通过以下方式访问它们:

[[MainMenuViewController alloc] initWithNibName:@"MainMenu"bundle:skinBundle]

我的skinBundle将从路径中捆绑:

skinBundle = [NSBundle bundleWithPath:[[NSBundle mainBundle] pathForResource:@"skinFolderPath"ofType:nil]

当我构建应用程序时,所有目录都被展平,导致只有一个 MainMenu.nib。当我添加文件夹作为文件夹引用时,会保留目录树,但不会将任何 .xib 文件编译为 .nib。

有什么办法可以实现这一点吗?或者也许是管理多个版本的 Nib 的更好方法?

最佳答案

您可以在 Xcode 中创建称为“资源包”的其他目标。它们具有 bundle 结构(如 .app 或 .framework bundle ),但不包含二进制代码。将您的资源添加到这些 bundle 中,将这些目标的产品添加到主目标的“复制 bundle 资源”阶段,然后在实例化期间使用以下代码使用这些 bundle :

NSString *skinBundlePath = [[NSBundle mainBundle] pathForResource: @"MyBundle" ofType: @"skin"]; // or whatever it's called
if (skinBundlePath) {
    NSBundle *skinBundle = [NSBundle bundleWithPath: skinBundlePath];
}

上面的代码片段假设您将目标的包装扩展设置为“skin”并将其命名为“MyBundle”。

在 Xcode 3 中(我手边没有 4),您可以通过转到“项目”->“新目标”来添加目标。从 Mac OS X 中选择“Loadable Bundle”(即使您使用的是 iOS)。在我看来,您不需要任何进一步的配置即可使其工作,但您必须注意资源最终会出现在添加它们时正确捆绑。

如果这听起来过于复杂,也可以创建一个新项目来构建可加载包,并将其作为主项目的依赖项;再次,将子项目的构建产品添加到主项目的资源“复制捆绑资源”阶段。

关于iphone - .nib 文件的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636735/

相关文章:

iPhone + 服务器 + 生产规模

iphone - 我无法在功能完成之前隐藏按钮并设置图像

ios - UICollectionViewCell 仅在滚动后更新

iphone - 如何保存UIwebview的浏览历史

ios - TableView 中的多行对针对一行 subview 的一项操作使用react

iOS 数据存储指南拒绝

ios - Swift UICollectionView Cells 移动/UIButton 标签在 ReloadData 上闪烁

ios - 如何在 UIDocumentInteractionController 发送的电子邮件中设置收件人和主题字段?

objective-c - UITapGestureRecognizer 超时?

ios - 如何在 XIB 中调整 super View 's height base on subview' 的大小?