使用故事板的子集作为第二个目标

时间:2013-02-06 18:41:06

标签: iphone ios xcode storyboard

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

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

这次我第一次使用了故事板。它有大约50个视图控制器。而现在我正面临着如何处理这个问题的问题。 特别是因为完整的应用程序是基于标签栏的,并且精简版本应该没有标签栏(它将覆盖不超过与完整版本的一个标签对应的功能)。

我该如何处理?我需要第二个故事板吗?我是否能够在故事板#2和#3中重用故事板#1中的视图?或者我至少可以使用第二个故事板作为起点,然后分成故事板#1的部分? (同样,lite应用程序将主要包含完整应用程序的一个选项卡内的功能)。

坦率地说,我甚至不知道从哪里开始。这就是为什么我无法分享到目前为止我所尝试的内容。 任何提示都表示赞赏。

1 个答案:

答案 0 :(得分:2)

好吧,最后我发现了一个合适的方式。虽然我对它并不完全满意,因为它不是我想要的,它可以工作,它为我提供了高度的重复使用。

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

2)Xcode将创建第二组故事板。

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

4)在我的情况下,免费应用程序的故事板基本上由它的根视图控制器和一个regluar视图控制器组成,它将我视为用户的一些主菜单。在我的情况下,完整的应用程序是基于选项卡,由于减少了funktionality和一些更精简的用例,免费的应用程序不是。

5)然后,此主菜单视图控制器将以编程方式进行segue以查看其他故事板的控制器。为此,故事板中的所有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)然而,在某些地方我仍然需要做出一些差异。对于这些情况,我在每个目标的项目设置中设置了两个宏。 FREEFULL是那些宏。所以我可以使用#ifdef构造编译稍微不同的代码,例如编程段。

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

#ifdef FREE
  // do this
#endif

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