gpt4 book ai didi

ios - Interface Builder IB - 导航 Controller ,跳过 View

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:23 24 4
gpt4 key购买 nike

您好,我是 iOS 的新手,对浏览我的 View 有疑问。

我正在使用 IB 连接导航栏中的 PREVIOUS 和 NEXT 按钮,以推送我的 View 。这一切都很好。但是,我无法确定我需要做什么或需要将代码放在哪里以便我可以跳过 View 。为了简化我的情况...

-我有 1 个导航 Controller 和 4 个 View Controller ,名称分别为 VC1、VC2、VC3、VC4。每个 VC 都有一个 .H/.M-从VC1开始,一个接一个。

假设我想跳过 VC3,并根据 VC2 中的设置直接跳到 VC4。我会将代码放在哪里来执行此操作?我是否需要从 VC3 的 NAV 按钮上取消 IBAction 方法?

如果之前已经涉及到这一点,我深表歉意。如果有 tut 或您知道回答此问题的帖子,请告诉我。我确实进行了搜索,但搜索返回的是通用帖子,这可能是因为我使用了错误的术语。

提前致谢。

最佳答案

几个想法:

  1. 如果您想从 VC2 推送到 VC3 或 VC4,而不是在特殊情况下让 VC3 立即推送到 VC4,我认为最好让 VC2 直接推送到适当的 View Controller 。因此,您可能在 VC2 中有一个 IBAction 可以为您执行此操作:

    - (IBAction)pushToNext:(id)sender
    {
    BOOL skipToVC4 = ... // put in whatever logic you'd use to bypass VC3 and go directly to VC4
    UIViewController *nextController;

    if (skipToVC4)
    {
    nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"VC4"];

    // obviously, if using NIBs, you'd do something like:
    // nextController = [[ViewController4 alloc] initWithNibName:@"VC4" bundle:nil];
    }
    else
    {
    nextController = [self.storyboard instantiateViewControllerWithIdentifier:@"VC3"];
    }

    [self.navigationController pushViewController:nextController animated:YES];
    }

    这样,当您从 VC4 弹出时,您将直接弹出回到相应的 View Controller (例如,如果您从 VC2 推送到 VC4,当您弹出时,您将自动弹出回到 VC2。

    而且,很明显,如果您使用的是 Storyboard,而不是手动调用 pushViewController,您可以从 VC2 中获得两个 segue(一个到 VC3,一个到 VC4),给它们适当的标识符,并且然后只需调用 performSegueWithIdentifier 即可转到适当的 View Controller 。但想法是一样的:您可以定义一个 IBAction,它根据您选择的任何逻辑执行适当的转场。

  2. 你说你有“在导航栏中推送我的 View 的上一个和下一个按钮”,我想知道你的“上一个”按钮。这是在执行 popViewControllerAnimated 吗?通常,“NEXT”按钮将推送到一个新的 View Controller ,但“PREVIOUS”按钮不应推送到前一个 View ,而是弹回到它。如果你不弹出,你可能会得到一些你以前的 View Controller 的多个实例。因此,“PREVIOUS”按钮应该链接到一个 IBOutlet 做如下事情:

    - (IBAction)popToPrevious:(id)sender
    {
    [self.navigationController popViewControllerAnimated:YES];
    }
  3. 弹回时,您显然会弹回您从中推送的 View Controller 。如果您想在返回 6.0 之前的 iOS 版本时跳过一些 View Controller ,您可以使用 popToViewControllerpopToRootViewControllerAnimated。例如,假设您从 VC1 推送到 VC2,再到 VC3,再到 VC4。如果你想从 VC4 一直弹出到 VC1,你可以在 VC4 中连接和 IBAction,如下所示:

    - (IBAction)popToRoot:(id)sender
    {
    [self.navigationController popToRootViewControllerAnimated:YES];
    }

    或者,如果你想从 VC4 弹回到 VC2,你会

    - (IBAction)popToVC2:(id)sender
    {
    for (UIViewController *controller in self.navigationController.viewControllers)
    {
    if ([controller isKindOfClass:[ViewController2 class]])
    {
    [self.navigationController popToViewController:controller animated:YES];
    return;
    }
    }
    }

    如果您将 VC2 的引用传递给 VC3 然后再传递给 VC4,则可以通过 navigationController.viewControllers 避免这种迭代,但有时上述技术更容易。

    顺便说一句,如果您仅支持 iOS 6 及更高版本,并且正在使用 Storyboard ,您还可以使用展开转场,这是一种更优雅的弹回到特定 View Controller 的方式。但不清楚是否 (a) 您正在使用 Storyboard; (b) 您仅支持 iOS 6 及更高版本,因此此时我将避免讨论展开转场。

关于ios - Interface Builder IB - 导航 Controller ,跳过 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15975039/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com