【问题标题】:Presenting UINavigationController several views deep, as initial view呈现 UINavigationController 几个视图深度,作为初始视图
【发布时间】:2011-01-09 17:14:46
【问题描述】:

在我的应用程序中,我希望有一个初始屏幕,允许用户注册(基于网络的)服务。完成此操作后,他们将自动登录。这些屏幕将显示为 UINavigationController 中的视图,例如:

1.Opening view > 2.Sign up view > 3.Logging in view > 4.Logged in view

一旦他们注册,下次启动应用程序时,应用程序应该直接进入视图 3(登录)。我如何将这种观点作为最初的观点提出? (另一个问题 - 如果用户决定退出,我将如何从视图 4 返回到视图 1?)

【问题讨论】:

    标签: iphone objective-c ios uinavigationcontroller


    【解决方案1】:

    字面上的答案(“如何更改初始视图?”)将改变您的应用程序委托:

    -(BOOL)application:(UIApplication *)application
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    
        if ( newuser )
        {
            [window addSubview:viewController1.view];
        } else {
            [window addSubview:viewController2.view];
        }
    }
    

    在您的 xib 文件中有两个 UINavigationControllers。但这可能会让人觉得有点不正统,并引发其他问题。否则,立即将整个视图控制器堆栈推送到其上,让视图控制器 1 和 2 立即推送下一个不带动画的控制器。

    然后用户将只看到“登录视图”。如果您决定让用户从堆栈中弹出视图 4 和 3,则会出现视图控制器 2。

    您可以通过调用 [self.navigationController popToRootViewControllerAnimated:NO] 之类的方法弹出整个堆栈

    【讨论】:

    • 你的意思是在前 2 个视图中有某种布尔值,如果是,它会立即在 viewDidLoad 方法中推送下一个视图?
    • 是的,类似的东西。您还可以在 applicationDidFinishLaunching 中从您的应用程序委托推送它们,这样视图控制器就不会被太多的业务逻辑弄乱。有几种方法可以推送或设置视图控制器。
    • 谢谢。在应用程序委托中向前推动几个屏幕的最佳方式是什么?目前我只有 [self.window addSubview:navigationController.view]; [self.window makeKeyAndVisible];
    • 我认为打电话给[navigationController setViewControllers:[NSArray arrayWithObjects:vc1,vc2,nil] animated:NO] 是最好的选择。
    • 引用 apple.com UINavigationController docs: "讨论您可以使用此方法更新或替换当前视图控制器堆栈,而无需显式推送或弹出每个控制器。此外,此方法可以让您更新没有动画变化的控制器集这可能适合在启动时 当您想将导航控制器返回到以前的状态时。”天哪都在那儿……
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多