这是我的 Storyboard
正如所指出的,我添加了一个注销按钮,以到达第一个 View 。
当应用程序启动时,它看起来像这样:
登录后,进入标签栏,如下所示:
我已将“注销”按钮与第一个 View 连接并选择推送。但是当我按下“注销”时,会发生以下情况:
我希望登录 View 按原样显示,但会出现选项卡栏以及一个我不希望出现的“后退”按钮。
*前 3 个选项卡项目有自己的导航 Controller ,注销按钮位于第一个选项卡项目上。
最佳答案
更新
我现在明白 TabBarController 是从 loginController 呈现的。
正确的返回方式是:
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
我将在下面的注释中留下,他们假设我们正在处理 UINavigationController 层次结构。仍然值得一读!
<小时/>这是部分答案...在我写完它之后,我意识到您的选项卡栏 Controller 不是您的登录 NavController 堆栈的一部分(我不这么认为),所以它不会工作 - 但您应该无论如何,请阅读它以了解为什么 Segue/PUSHing 不是正确的方法。
我稍后会针对您的案例更新更准确的答案...
您不想使用segue,或者PUSH...将其想象为一堆卡片,推送是将更多卡片添加到堆栈中,因此您将登录屏幕的版本添加到您的NavController 堆栈包含在选项卡栏 Controller 内。这与您已经创建的登录屏幕实例不同,它是一个新实例(push 会创建一个新实例)。
您想要从牌堆中移除牌并返回到您的第一张牌。这是一个 POP 操作。
其中一个可以工作。
- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated
- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated
它们是UINavigationController
方法。您可以从最顶层的 UIViewController 访问它们,如下所示:
[self navigationController] popToRootViewControllerAnimated:NO;
[self navigationController] popToViewController:myLogInViewController animated:YES;
您可以通过在 viewController 中放置 IBAction 来从注销按钮触发它们。
看起来您想要返回的 viewController 确实是您的 Root View Controller ,因此请尝试一下,看看它是否有效。如果没有,您将需要对要返回的 viewController 的引用。你可以通过计算堆栈来做到这一点。该堆栈作为导航 Controller 的 viewControllers
数组属性进行访问。例如,如果它是从 rootViewController 向上的第二个 viewController,
UIViewController* logInViewController =
[[self navigationController] viewControllers] objectAtIndex:1];
会得到你想要的那个。
关于iphone - 从选项卡栏返回到第一个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297021/