iPhone UINavigationController 应用程序设计

标签 iphone objective-c uinavigationcontroller

尝试着思考如何围绕 UINavigationController 构建应用程序。在我看来,大多数解释都假设应用程序总是从根 Controller 开始,并从那里向下钻取,但我不清楚这如何与进入应用程序之前发生的登录/注册步骤相适应。结构将是这样的:

 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                |

所以基本上我假设“主应用程序” Controller 实际上应该是应用程序的根 Controller ,对吗?在这种情况下,我不清楚如何处理位于它前面的整个过程(基本上就像与应用程序导航结构分开的导航结构)。 “主页”是显示在主应用程序上的模式 Controller ,也是用于登录/注册步骤的单独导航 Controller ,以便在登录后简单地弹出它以将我们带回到应用程序根目录?

希望我只是把本来很简单的事情复杂化了,只是似乎还没有让我感兴趣。非常感谢任何指点。

编辑:这就是我最终得到的结果,它似乎适合我的需要。我有两个 UINavigationController,它们都分配给 IB 中的 MainWindow,并具有单独的启动 NIB。一个是应用程序启动导航 Controller (主页/登录/注册),另一个是主应用程序导航 Controller 。我的应用程序委托(delegate)有以下代码:

- (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];
}

在登录/注册的最后一步中,我有以下代码,它调用应用程序委托(delegate)以在导航 Controller 之间进行切换:

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

我怀疑我可以用一个导航 Controller 来完成这一任务,但是根据我的 View 结构,这对我来说是合乎逻辑的,并且似乎有效,我最终将主主页 View 作为应用程序导航 Controller 的 Root View ,如预期的。如果有什么愚蠢的事情,我们将不胜感激。

最佳答案

您可以在任何阶段创建 UINavigationController,包括在登录屏幕之后 - 只需将其设为您要开始使用它的 View 的 subview 即可。此时您将看到 View Controller (您将其作为新导航 Controller 的 Root View )。拥有它后,您可以将新的 View Controller 推送到导航堆栈上。您可以查看导航堆栈

根 Controller 没有什么特别之处,除了您可以通过一次调用 (popToRootViewControllerAnimated) 到达那里,并且您无法弹出更远的位置。导航 Controller 管理的所有 View Controller 都位于堆栈上,因此您可以根据需要压入堆栈或从堆栈中弹出。

我认为当后退箭头有用时它就很有用。

关于iPhone UINavigationController 应用程序设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3455736/

相关文章:

iphone - 什么时候发布[[NSMutableData数据]保留]?

ios - iPhone API 获取本地设备电话号码

iphone - 在 UItableView EditingStyle Delete 中拯救单元格的问题

ios - 出现“选择器的未知实例方法”错误,我不知道为什么

objective-c - FFMPEG - 跳过某些关键帧的解码会导致延迟?

iphone - 当我将新 View Controller 推送到 self.navigation Controller 时应用程序崩溃了

ios - 为什么使用 setViewControllers 会从 UINavigationController 的导航栏中删除所有内容?

iphone - 如何在不丢失精度的情况下将 NSDecimalNumber 转换为 CLLocationDegrees?

ios - Xcode 10 "Could not build module Darwin/Foundation/CoreFoundation"等

iphone - 使用 UINavigationController 从右向左推送 ViewController