好吧,终于找到合适的方法了。尽管我对它并不完全满意,因为它不是我想要的,但它确实有效,并且为我提供了高度的重用。
1) 在 xcode 中创建一个新目标。
2) Xcode 将创建第二组故事板。
3)故事板默认与原始名称相同,但位于不同的名称(由 xcode 新创建)并为每个目标分配一个。我重命名它是因为我的第二个目标中需要两个故事板.. 不需要重命名如果每个目标只使用自己的故事板。但在这种情况下,您应该重命名它。如果重命名它,则需要在目标的项目设置中分配新名称。效果很好。
4) 在我的例子中,免费应用程序的情节提要基本上由它的根视图控制器和一个常规视图控制器组成,它使我成为用户的一些主菜单。在我的情况下,完整的应用程序基于选项卡,并且由于功能减少和一些更精简的用例,免费应用程序不是。
5)然后这个主菜单视图控制器将以编程方式连接到另一个故事板的视图控制器。为此,情节提要中的所有 ID 都必须正确设置且唯一 (!)。在我的例子中,这个菜单由许多按钮组成。它们中的每一个都调用一个 IBAction。你当然可以给我们一张桌子等等。
- (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)一旦这个视图控制器启动并运行,它就会在自己的故事板中很好地工作,并将完美地连接到后续的视图控制器等。
7)但是,在某些地方我仍然需要做出一些改变。对于这些情况,我在每个目标的项目设置中设置了两个宏。FREE
并且FULL
是那些宏。因此,我可以使用该构造编译稍微不同的代码,例如程序化 segues #ifdef
。
#ifdef FULL
// do this
#else
// do that
#endif
或者
#ifdef FREE
// do this
#endif
希望,这有助于 TJ 和其他处于相同情况的人。