使用swift后丢弃视图

时间:2014-07-04 01:21:18

标签: ios uiviewcontroller uinavigationcontroller swift

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

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

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

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

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

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

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

最佳。

1 个答案:

答案 0 :(得分:1)

这是模态视图控制器的绝佳机会!使用UINavigationController表示您需要它(表格视图加上其他详细信息视图)。但是当您需要用户登录时,请使用导航控制器中的presentViewController来显示前面的另一个控制器。这可以是UINavigationController本身,也可以是简单的UIViewController。完成后,调用dismiss方法,它将滑落,将基本导航控制器留在那里,随时可以使用。希望有所帮助!