首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式设置/激活Segue

以编程方式设置/激活Segue
EN

Stack Overflow用户
提问于 2014-03-29 10:56:23
回答 4查看 192关注 0票数 2

我正在尝试在我的iOS应用程序中设置第一个启动视图。为此,我有以下代码,允许我在应用程序第一次启动时执行代码。

我想要的是,当应用程序第一次启动时,用户被发送到我在故事板中设置的FirstLaunch视图,而不是FirstView视图。每次连续启动都会将用户发送到FirstLaunch视图。

目前,我在NavigationController.m中执行了这段代码,但是如果这在AppDelegate.m中执行得更好,我可以修改它。

代码语言:javascript
运行
复制
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"])
{
    // not first launch
}
else
{
    // first launch

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"FirstLaunch"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

我的问题是:如何以编程方式设置segue (或激活segue),将用户发送到FirstLaunch视图而不是普通的FirstView?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-29 11:09:14

您不需要这样做--您所需要的只是一种以编程方式选择初始视图控制器的方法,这取决于它是否是第一次启动。

要做到这一点,请取消选中FirstView上情节提要中的"is初始视图控制器“,并按如下方式更改应用程序委托:

代码语言:javascript
运行
复制
- (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。这样,您就可以确定用户有足够的时间查看屏幕并与其交互。

票数 0
EN

Stack Overflow用户

发布于 2014-03-29 11:02:56

在故事板中,为您需要的segue设置标识符(选择segue并选择Attributes检查器)。

之后,您可以通过编程方式调用该segue:

代码语言:javascript
运行
复制
[self performSegueWithIdentifier:@"indentifier" sender:nil];
票数 0
EN

Stack Overflow用户

发布于 2014-03-29 11:07:19

这篇解释得很好的关于segue的文章将回答您的问题。

http://www.appcoda.com/storyboards-ios-tutorial-pass-data-between-view-controller-with-segue/

用segue激活和传递数据的示例块:

代码语言:javascript
运行
复制
- (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];
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22730148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档