iphone - 使用 Storyboard的子集作为第二个目标

标签 iphone ios xcode storyboard

我将开发一个应用程序的完整版、精简版和免费版。 (或至少其中两个)

过去,没有 Storyboard,我只是添加另一个目标并设置编译器变量并使用 #if/else/endif 语句来管理版本之间的差异。到目前为止一切都很好。

这次我第一次使用 Storyboard。它有大约 50 个 View Controller 。现在我面临着如何处理这个问题的问题。 特别是因为完整的应用程序是基于选项卡栏的,而精简版应该没有选项卡栏(它将覆盖的功能不超过与完整版本的选项卡之一相对应的功能)。

我该如何处理这个问题?我需要第二个 Storyboard吗?我可以在 Storyboard #2 和 #3 中重复使用 Storyboard #1 中的 View 吗?或者我至少可以使用第二个 Storyboard作为起点,然后分支到 Storyboard #1 的部分? (同样,精简版应用程序将主要包含完整应用程序的选项卡之一内的功能)。

坦白说,我什至不知道从哪里开始。这就是为什么我无法分享我迄今为止所尝试的内容。 任何提示表示赞赏。

最佳答案

好吧,终于找到合适的方法了。尽管我对它并不完全满意,因为它不是我想要的,但它确实有效,并且为我提供了高度的重用性。

1) 在 xcode 中创建一个新目标。

2) Xcode 将创建第二组 Storyboard。

3) 默认情况下, Storyboard的名称与原始名称相同,但驻留在不同的位置(由 xcode 新创建),并为每个目标分配一个。我重命名了它,因为我的第二个目标中需要两个 Storyboard。重命名它如果每个目标仅使用自己的 Storyboard,则不需要。但在这种情况下,您应该重命名它。如果您重命名它,则需要在目标的项目设置中分配新名称。效果很好。

4) 就我而言,免费应用程序的 Storyboard基本上由其 Root View Controller 和一个常规 View Controller 组成,该 Controller 将我作为用户的一些主菜单。就我而言,完整的应用程序基于选项卡,并且由于功能减少和一些更精简的用例,免费应用程序不是基于选项卡的。

5) 然后,该主菜单 View Controller 将以编程方式连接到其他 Storyboard的 View Controller 。为此, Storyboard中的所有 ID 都必须正确设置且唯一(!)。就我而言,该菜单由许多按钮组成。它们中的每一个都调用一个 IBAction。您当然可以用一张 table 代替等等。

 - (IBAction)newMinutes:(id)sender
 {
     // Get the storyboard named secondStoryBoard from the main bundle:
     UIStoryboard *secondStoryBoard = [UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil];

     // Load the view controller with its identifier string 
     // Change UIViewController to the appropriate class
     UIViewController *theTabBar = (UIViewController *)[secondStoryBoard instantiateViewControllerWithIdentifier:@"MinutesMenu"];

     // Then push the new view controller in the usual way:
     [self.navigationController pushViewController:theTabBar animated:YES];
 }

6)一旦这个 View Controller 启动并运行,它就可以在自己的 Storyboard中很好地工作,并且可以完美地连接到后续的 View Controller 等。

7) 然而,在某些地方我仍然需要做出一些改变。对于这些情况,我在每个目标的项目设置中设置了两个宏。 FREEFULL 就是这些宏。因此,我可以使用 #ifdef 构造编译略有不同的代码,例如编程转场。

#ifdef FULL 
  // do this
#else 
  // do that
#endif

#ifdef FREE
  // do this
#endif

希望这对 T.J. 有帮助。和其他处于相同情况的人。

关于iphone - 使用 Storyboard的子集作为第二个目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736393/

相关文章:

ruby - 将 RSpec 用于 iPhone Controller

iphone - 是否有适用于 iOS 的字体演示应用程序?

ios - iOS (React Native) 上的 build1 文件夹背后的原因是什么

ios - MCSession 需要很长时间才能释放

ios - 在 iTunes 连接上上传应用程序后在电子邮件中出现问题,意外的 CFBundleExecutable key

iphone - 模拟相机应用程序 'tap to focus'

iphone NSNumberFormatter 在解析时在模拟器上工作,而不是在设备操作系统 4.2 上工作

ios - 如何在 iphone 5 和 iphone 6 上更改 ImageView 的大小?

iOS 分发 "Unable to process application Info.plist"

ios - 整个程序中的变量名更改