代码之家  ›  专栏  ›  技术社区  ›  Brian Moeskau

iPhone UinAvigationController应用程序设计

  •  2
  • Brian Moeskau  · 技术社区  · 14 年前

    尝试围绕uinavigationcontroller构建应用程序。在我看来,大多数的解释都假定应用程序总是从根控制器开始,并从根控制器向下钻取,但我不清楚这是如何与登录/注册步骤相适应的,这是在你进入应用程序之前发生的。结构如下:

     Home page                                            | Main app (typical nav hierarchy)
    ------------                                          |---------------------------------
     Log in   ----> Login page                            | App section 1
                   ------------                           | App section 2
                    Do login   ------------------------>  | etc.
                 <- Cancel                                |
                                                          |
     Register ------------------->  Register page         |
                                   -----------------      |
                                    Do registration --->  |
                                 <- Cancel                |
    

    所以基本上我假设“主应用程序”控制器应该是应用程序的根控制器,对吗?在这种情况下,我不清楚如何处理它前面的整个过程(这基本上就像一个独立于应用程序导航结构的导航结构)。“主页”是否是主应用程序上显示的模式控制器,以及登录/注册步骤的单独导航控制器,以便在登录后弹出,将我们放回应用程序根目录?

    希望我只是过于复杂化了一件很简单的事情,只是似乎还没有为我点击。任何指点都非常感谢。

    编辑 这就是我最后的结果,这似乎对我所需要的有用。我有两个uinavigationcontrollers,都分配给ib中的主窗口,有单独的起始笔尖。一个是应用程序启动导航控制器(home/login/registration),另一个是主应用程序导航控制器。我的应用程序代理具有以下代码:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        [window addSubview:startNavController.view];
        [window makeKeyAndVisible];
        return YES;
    }
    
    - (void)activateMainApp {
        [startNavController.view removeFromSuperview];
        [window addSubview:appNavController.view];
        [window makeKeyAndVisible];
    }
    

    在登录/注册的最后一步中,我有这个代码,它调用应用程序委托在导航控制器之间进行切换:

    - (IBAction)continuePressed {
        // Transfer control to the main app nav controller:
        MyAppDelegate *app = (MyAppDelegate*)[[UIApplication sharedApplication] delegate];
        [app activateMainApp];
        [app release];
    }
    

    我怀疑我可以用一个导航控制器来完成这项工作,但是根据我的视图结构,这对我来说是合乎逻辑的,而且似乎可以工作,最后我把主主视图作为应用程序导航控制器的根视图,根据需要。如果有什么棘手的问题,我们会感谢任何额外的反馈。

    2 回复  |  直到 14 年前
        1
  •  3
  •   Adam Eberbach Adil Shaikh    14 年前

    您可以在任何阶段创建一个uinavigationController,包括在登录屏幕之后-只需将其作为您要开始使用它的视图的子视图。您将在该点看到视图控制器(您创建了新导航控制器的根视图)。一旦你拥有了它,你就可以将新的视图控制器推到导航堆栈上。您可以查看导航堆栈

    根控制器没有什么特别的地方,除了一次调用就可以到达那里。( popToRootViewControllerAnimated )而且你不能再跳下去了。导航控制器管理的所有视图控制器都位于一个堆栈上,因此您可以根据需要推到堆栈上或从堆栈中弹出。

    我认为它是一个有用的东西,当后箭头将是有用的。

        2
  •  0
  •   Conceited Code    14 年前

    uinavigationController实际上只是组织uiviewController的一种方法。不必有特定的根视图。你只是把你想要的视图放在最上面。

    要在顶部添加另一个视图控制器,只需调用[uinavigationcontroller pushviewcontroller:animated:yes];