我将开发一个应用程序的完整版、精简版和免费版。 (或至少其中两个)
过去,没有 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) 然而,在某些地方我仍然需要做出一些改变。对于这些情况,我在每个目标的项目设置中设置了两个宏。 FREE
和 FULL
就是这些宏。因此,我可以使用 #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/