我可以在应用中更改“主要故事板文件基本名称”吗?

时间:2013-08-02 06:12:45

标签: ios xcode storyboard info.plist

我使用项目中的不同目标制作了专业版和精简版应用程序。这两个应用程序使用不同的storyboard和info.plist文件 我想在精简版应用程序中使用应用程序购买按钮进行操作,如专业版应用程序。为此,当用户购买应用购买功能时,我需要将精简版使用的故事板文件更改为专业版的故事板文件。
使用的故事板文件名存储在xxx-info.plist文件中的“主故事板文件基本名称”中。因此,我可以在用户执行某些操作时更改Storyboard文件基本名称。我不知道是否可能。

我怎么能得到这个? 谢谢。

2 个答案:

答案 0 :(得分:4)

您可以在启动时动态设置它:

// set storyBoardName according to upgrade status
UIStoryboard *storyBoard = 
   [UIStoryboard storyboardWithName:storyBoardName bundle:nil];
UIViewController *initViewController = 
   [storyBoard instantiateInitialViewController];
[self.window setRootViewController:initViewController];

所以我想升级后再次启动应用程序是可以的。

答案 1 :(得分:3)

是的,在您的AppDelegate应用程序中:didFinishLaunchingWithOptions:launchOptions方法您可以从plist获取故事板名称,然后根据此设置加载故事板。或者,您可以将故事板名称存储在UserDefaults中,并在用户支付专业版本后更新该设置。

或者,您可以使用UserDefaults来存储用户是否已升级,并将故事板名称保留为appdelegate中的常量:

#define kStoryboardLite @"LiteStoryboard.storyboard"
#define kStoryboardPro @"ProStoryboard.storyboard"

...

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   NSString *storyboardName;
    NSString *userType = [[NSUserDefaults standardUserDefaults] objectForKey:@"userType"];
    if ([userType isEqualToString:@"pro"]) {
        storyboardName = kStoryboardPro;
    } else {
        storyboardName = kStoryboardLite;
    }
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
    UIViewController *initialViewController = [storyboard instantiateInitialViewController];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController  = initialViewController;
    [self.window makeKeyAndVisible];

}

如果您使用此方法,则必须要求用户重新启动应用以加载其他故事板。