【问题标题】:Having the hidden Master View Controller display the first time the app is run第一次运行应用程序时显示隐藏的主视图控制器
【发布时间】:2014-10-20 14:05:45
【问题描述】:

我在我的应用程序的 iPad 迭代上配置了 UISplitViewController,在纵向模式下,有一个 UIBarButtonItem 调用主视图。在横向中,始终显示此视图(主视图和详细视图)。

因为 iPad 版本对我的用户来说是新的,并且因为他们习惯于在 iPhone 上看到标签栏,所以我想确保提醒用户注意菜单的去向。

我希望在用户第一次启动应用时显示我的主视图。

因此,当用户按下UIBarButtonItem 时,会显示主视图,但在第一次启动应用程序时,我希望显示主视图(即按下 UIButton BarButtonItem)。

我熟悉检查应用程序何时首次启动的过程。我只需要知道如何让按钮被调用。

我在详细信息中有这段代码:

#pragma mark - Split View Handler
-(void) turnSplitViewButtonOn: (UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *) popoverController {
    barButtonItem.title = NSLocalizedString(@"Master", @"Master");
    _splitViewBarButtonItem = barButtonItem;
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];
    self.masterPopoverController = (EnvylopeMasterTableViewController *)popoverController;
}

-(void)turnSplitViewButtonOff
{
    NSLog(@"SplitViewButtonOff Called");
    // Called when the view is shown again in the split view, invalidating the button and popover controller.
    [self.navigationItem setLeftBarButtonItem:nil animated:YES];
    _splitViewBarButtonItem = nil;
    self.masterPopoverController = nil;

}

-(void) setSplitViewButton:(UIBarButtonItem *)splitViewButton forPopoverController:(UIPopoverController *)popoverController
{
    NSLog(@"Split View Being Called");
    if (splitViewButton != _splitViewBarButtonItem) {
        if (splitViewButton) {
            NSLog(@"Split View Button Being Called");
            [self turnSplitViewButtonOn:splitViewButton forPopoverController:popoverController];
        } else {
            [self turnSplitViewButtonOff];
            NSLog(@"Split View Button Not Being Called");
        }
    }
}

这是我在 Master 中的代码:

#pragma mark - Split View Delegate
- (void)splitViewController:(UISplitViewController *)splitController willHideViewController:(UIViewController *)viewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController:(UIPopoverController *)popoverController
{
    UINavigationController *navController = [[[self splitViewController ] viewControllers ] lastObject ];
    id vc = [[navController viewControllers] firstObject];

    self.popover = popoverController;

    [vc setSplitViewButton:barButtonItem forPopoverController:popoverController];
}

- (void)splitViewController:(UISplitViewController *)splitController willShowViewController:(UIViewController *)viewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
    UINavigationController *navController = [[[self splitViewController ] viewControllers ] lastObject ];
    id vc = [[navController viewControllers] firstObject];
    self.popover = nil;
    [vc setSplitViewButton:nil forPopoverController:nil];
}

应用程序启动时,NSLog“Split View Being Called”和“Split View Button Being Called”正在输出到控制台,但尚未按下按钮且未显示主视图.

我希望这是有道理的,如果有人对此有任何指导,我将不胜感激。

【问题讨论】:

    标签: ios objective-c ipad uisplitviewcontroller uibarbuttonitem


    【解决方案1】:

    我认为一个不错的方法是利用 NSUserDefaults 来检查它是否是用户的第一次启动。

    您可以参考this post 了解如何做到这一点。

    一旦您存储了该值,它就像在应用启动时有条件地检查它并进行“首次应用启动”设置(如果它确实是他们的首次启动)一样简单。

    编辑:

    应用打开后,您可以根据用户是否是第一次以编程方式触摸按钮。查看this

    【讨论】:

    • 嗨乔纳森 - 非常感谢您的回复。抱歉..我实际上熟悉使用 NSUserDefaults 检查用户是否之前启动过的技术,但我有点困惑如何在首次启动时按下按钮..
    • @Lavanya 我可能不完全理解你想要做什么,但看看我的编辑是否对你有帮助。
    • 嗨乔纳森 - 感谢更新的答案,我很抱歉没有明确说明 - 但第二个链接帮助我实现了我想要的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多