我使用项目中的不同目标制作了专业版和精简版应用程序。这两个应用程序使用不同的storyboard和info.plist文件
我想在精简版应用程序中使用应用程序购买按钮进行操作,如专业版应用程序。为此,当用户购买应用购买功能时,我需要将精简版使用的故事板文件更改为专业版的故事板文件。
使用的故事板文件名存储在xxx-info.plist文件中的“主故事板文件基本名称”中。因此,我可以在用户执行某些操作时更改Storyboard文件基本名称。我不知道是否可能。
我怎么能得到这个? 谢谢。
答案 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];
}
如果您使用此方法,则必须要求用户重新启动应用以加载其他故事板。