【问题标题】:Discarding view after use with swift使用 swift 后丢弃视图
【发布时间】:2014-07-04 01:21:17
【问题描述】:

当我的应用程序启动时,会显示一个登录按钮。这是登录视图控制器。我将一个 UINavigationViewController 实例化为具有 LoginViewController 作为 rootViewController。然后,在登录(使用 Facebook SDK)后,我会显示第二个视图,即 TableViewController。像这样:

    self.navigationController.popViewControllerAnimated(false);
    self.navigationController.pushViewController(
        tableView, animated: false
    );

不过,这种方法存在一些问题。对于初学者,第二个视图显示后退按钮,我知道我可以隐藏(并且应该,因为我弹出了第一个视图)。但是,最糟糕的是,navigationController 没有分配给 TableViewController,它目前只显示一个注销按钮。所以,当我按下注销时,以下显然崩溃了:

    self.navigationController.popViewControllerAnimated(false);
    self.navigationController.pushViewController(
        loginView, animated: false
    );

问题是:如果我使用活动登录(即缓存 facebook 登录令牌)关闭应用程序,我希望它直接进入第二个视图控制器(表格视图)。我在 5 月的 AppDelegate 中有这个,在 didFinishLaunchingWithOptions:

    if (Session.activeSession().isOpen()) {
        rootViewController = tableView;
    }
    else {
        rootViewController = loginView;
    }

这种情况的最佳方法是什么?也许我应该只是堆叠两个视图(不弹出)?如果是这样,我如何让第二个视图位于同一个导航控制器下?当应用在没有登录令牌的情况下启动、执行登录然后注销时,尝试解包 tableView 会引发异常。

最好的。

【问题讨论】:

  • navigationController.viewControllers = [tableView] 怎么样?
  • 我认为没有设置tableView.navigationController,还是这样?

标签: ios uiviewcontroller uinavigationcontroller swift


【解决方案1】:

这对于模态视图控制器来说是一个很好的机会!使用UINavigationController 来满足您的任何需要(表格视图以及其他详细信息视图)。但是当您需要用户登录时,请使用导航控制器中的presentViewController 在前面显示另一个控制器。这可以是UINavigationController 本身,也可以是简单的UIViewController。完成后,调用dismiss 方法,它会滑开,留下你的基本导航控制器,准备好使用。希望对您有所帮助!

【讨论】:

  • 看起来很棒 =) 我没想到模型视图!谢谢
  • 是的!很高兴我能帮上忙。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多