如何使用带有子区域/路线的iOS应用程序进行导航

如何使用带有子区域/路线的iOS应用程序进行导航,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我是objective-c/iOS开发的新手,在应用程序菜单结构(如: 主页 开始订单 选择存储 选择类别 将项目添加到篮子中 结帐等 我的账户 编辑/添加地址 更新个人资料等 订单历史记录 视图顺序 等 我正在使用显示导航菜单(即,顶级导航隐藏,不显示在选项卡栏控制器上) 我有web开发背景,所以我习惯于使用具有路由(URL)的个人视图,并且能够从任何地方加载任何路由 我想我知道如何使用UINavigationController(或者至少我认为我知道)来处理顺序导航,例如(主

我是objective-c/iOS开发的新手,在应用程序菜单结构(如:

  • 主页
    • 开始订单
    • 选择存储
    • 选择类别
    • 将项目添加到篮子中
    • 结帐等
  • 我的账户
    • 编辑/添加地址
    • 更新个人资料等
  • 订单历史记录
    • 视图顺序
我正在使用显示导航菜单(即,顶级导航隐藏,不显示在选项卡栏控制器上)

我有web开发背景,所以我习惯于使用具有路由(URL)的个人视图,并且能够从任何地方加载任何路由

我想我知道如何使用UINavigationController(或者至少我认为我知道)来处理顺序导航,例如(主页>开始顺序>选择存储等),返回(pop)是有意义的,但我有点担心我缺少一些关于非结构化导航的东西

例如,如果我在签出视图(家庭导航层次结构中的几个控制器)上,我决定点击菜单(菜单滑出)并选择我的帐户,摆弄我的详细信息,然后点击菜单和主页,我希望回到导航到我的帐户之前的位置(即在签出页面上)

这种导航的标准做法是什么?我在看一些图书馆,比如,但没有足够的经验来判断这是否是一种体面的方法


我考虑过以下方法:

  • 维护一个高级UINavigationController,该控制器维护子UINavigationController数组,即[HomeNavigationController、AccountNavigationController、OrderHistoryNavigationController]
  • 首先,主导航控制器将加载HomeNavigationController,该控制器指向“Home”作为根视图,用户将通过一个订单流程进行处理,其中push/pop按预期工作
  • 如果用户点击我的帐户,我会将主导航控制器阵列重置为帐户导航控制器(帐户视图控制器将是根),用户将继续在那里。我会在HomeNavigationController上保留一个句柄,以便在用户点击菜单Home时保持其位置(即,我会将主导航控制器重置回HomeNavigationController引用,其中堆栈将处于他们点击我的帐户之前的状态)

  • 这是一个糟糕的方法,有什么原因吗

    每当我使用ECSlidingViewController时,通常最容易为每个视图控制器分配情节提要ID。这样,当您在菜单中选择特定项时,可以根据情节提要ID显示视图控制器,如下所示:

    UIViewController *newTopVC = [self.storyboard instantiateViewControllerWithIdentifier:@"topViewController"];
    
    CGRect frame = self.slidingViewController.topViewController.view.frame;
    self.slidingViewController.topViewController = newTopViewController;
    self.slidingViewController.topViewController.view.frame = frame;
    [self.slidingViewController resetTopView];
    
    这是我从以前版本的ECSlidingViewController中得到的一个示例,但一般概念应该是相同的。您只需确保要显示的视图控制器具有在代码中指定的相同标识符。您可以在情节提要中找到标识符。。。选择视图控制器并查看标识检查器。将有一个“身份”部分列出“故事板ID”

    如果选择使用nib文件而不是故事板,则可以使用以下内容替换第一行:

    UIViewController *newTopVC = [[UIViewController alloc] initWithNibName:@"TopViewController" bundle: nil];
    

    如果您这样做,您从菜单中实例化的视图控制器本身可能是不同菜单项的导航控制器,这样用户就可以按预期在该菜单功能中来回移动。

    这种方法的最大问题是跟踪控制器的复杂性(你的要点3)这可能会变得很难看

    [P>也是,苹果公司非常坚决地认为滑板菜单是个坏主意。不是你必须接受苹果公司对此的意见,而是要考虑的事情。 处理此类导航的常用方法是使用UITAB控制器。例如,请参阅“iTunes商店”应用程序,甚至“手机”应用程序

    我使用了选项卡栏来分割不同的功能集,有些选项卡包含UINavigationController。我认为这非常有效

    这些选项卡允许用户在应用程序的各个部分之间轻松切换,而不必丢失位置。每个选项卡都保留在内存中,当选项卡更改时,您无需编写逻辑来交换视图控制器

    当然,当用户返回时,仍然需要考虑用户在切换到另一个选项卡时所做的更改会对当前选项卡造成的影响。

    例如,如果用户在“订单”选项卡中进行购买,然后切换到“帐户”选项卡进行登录,当用户返回“订单”选项卡时,这是否会影响订单流程?也许您应该在订单流程中提供一个简化的登录视图,以便用户不必切换到其他选项卡


    这是你需要考虑的事情,不管你采用哪种导航方法。我的建议是好好看看UITABACORT,看看它对你是否有用。

    谢谢你的回答。我应该在我的问题中概述我不使用故事板。我想你在概念上已经概述了QUI。类似于我在我的问题中考虑的方法。哦,好吧!是的,那么如果你不使用故事板,而不是第一行,你可以加载你想要使用的nib文件。我会更新答案,让它也在那里。谢谢迈克,你的观点是正确的。我们非常仔细地考虑了滑块菜单的使用。我们已经拥有该应用程序的web版本,并了解用户如何使用它。在订购过程中,该过程是相当线性的。我们不希望浪费宝贵的不动产用于不经常访问的功能。鉴于您已表示