我正在尝试在我的iOS应用程序中设置第一个启动视图。为此,我有以下代码,允许我在应用程序第一次启动时执行代码。
我想要的是,当应用程序第一次启动时,用户被发送到我在故事板中设置的FirstLaunch视图,而不是FirstView视图。每次连续启动都会将用户发送到FirstLaunch视图。
目前,我在NavigationController.m中执行了这段代码,但是如果这在AppDelegate.m中执行得更好,我可以修改它。
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"])
{
// not first launch
}
else
{
// first launch
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}我的问题是:如何以编程方式设置segue (或激活segue),将用户发送到FirstLaunch视图而不是普通的FirstView?。
发布于 2014-03-29 11:09:14
您不需要这样做--您所需要的只是一种以编程方式选择初始视图控制器的方法,这取决于它是否是第一次启动。
要做到这一点,请取消选中FirstView上情节提要中的"is初始视图控制器“,并按如下方式更改应用程序委托:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds];
// Use the name of your storyboard below
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil];
NSString *initialId;
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]) {
// not first launch
initialId = @"FirstViewController";
} else {
// first launch
initialId = @"FirstLaunchViewController";
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
self.window.rootViewController = [storyboard instantiateViewControllerWithIdentifier:initialId];
[self.window makeKeyAndVisible];
return YES;
}上面的代码嵌入了决定这是否是第一次启动的代码,并根据此决定设置目标屏幕的故事板标识符。
请注意,此实现将永远不会再次向用户显示第一个启动屏幕,即使他在第一次出现时没有机会好好看一眼(例如,因为有人打电话给他,或者设备耗尽了电池电源)。一种更好的方法是以与您相同的方式读取NSUserDefaults,但只有当第一个启动控制器被用户拒绝时,才将其设置为YES。这样,您就可以确定用户有足够的时间查看屏幕并与其交互。
发布于 2014-03-29 11:02:56
在故事板中,为您需要的segue设置标识符(选择segue并选择Attributes检查器)。
之后,您可以通过编程方式调用该segue:
[self performSegueWithIdentifier:@"indentifier" sender:nil];发布于 2014-03-29 11:07:19
这篇解释得很好的关于segue的文章将回答您的问题。
http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/
用segue激活和传递数据的示例块:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showRecipeDetail"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
RecipeDetailViewController *destViewController = segue.destinationViewController;
destViewController.recipeName = [recipes objectAtIndex:indexPath.row];
}
}https://stackoverflow.com/questions/22730148
复制相似问题