我在查看登录屏幕时遇到问题。故事板结构如下: Storyboard Structure
该应用的用户流程如下: 用户登录LoginVC->通过模态segue->进入主标签栏屏幕;在每个标签栏项目上,我在导航控制器上添加右栏按钮以访问配置文件页面,每个标签栏项目都有独立的导航控制器,以保持导航控制器结构的线性。 - >一旦我点击个人资料页面按钮,个人资料页面将以模态方式显示 - >当单击配置文件页面上的注销按钮时,它会触发展开segue并关闭视图控制器
func logoutUser(){
//Networking.logoutUser()
print("It goes to login")
self.performSegue(withIdentifier: "unwindToLogin", sender: self)
}
unwind segue是在最左边的VC.I上的LoginVC上实现的,它在配置文件屏幕上连接了unwind segue并称之为“unwindToLogin” 我只是使用performSegueWithIdentifier。但是,该方法不会被调用,视图也不会发生任何事情。
编辑1: 我想知道,因为我在tab bar vc上模拟调用个人资料页面,它无法找到unwindtologin。 如果我只是使用instantiateviewcontoller来调用login,它会清除我的视图控制器堆栈吗?
编辑2: 对不起,我忘了当我检查用户是否登录时,我使用下面的代码:
if (FIRAuth.auth()?.currentUser != nil) {
self.storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
self.window?.rootViewController = self.storyboard?.instantiateViewController(withIdentifier: "TabBarViewController")
}
实际上他们找不到unwind方法,因为根视图不是主登录视图控制器。
有人可以帮忙吗?
答案 0 :(得分:3)
使用展开segue移动到任何View控制器。
用于在单击按钮时移动到任何视图控制器。
- (IBAction)unwindToCurrentController:(UIStoryboardSegue *)unwindSegue { } 强>
现在构建并运行您的应用。它完美地运作。
答案 1 :(得分:1)
您需要在每个要调用它的ViewController上创建展开segue。他们都可以在登录屏幕中使用相同的@IBAction
目的地,并且可以将它们全部称为"unwindToLogin"
。
我在MainTabBarController
上看到了unwind segue。在UserProfileController
中,您需要控制 -drag从视图控制器图标到退出图标,然后选择您的{{ 1}}在弹出窗口中。然后在文档大纲的@IBAction
中找到unwind segue,并将其标识符UserProfileController
。
回复编辑2:
由于您的初始viewController是以编程方式放置的,因此无法展开"unwindToLogin"
。在这种情况下,
将着陆LoginViewController
放入@IBAction
,并将MainTabBarController
设置为登录屏幕。
答案 2 :(得分:-1)
你可以试试这个为我工作。
[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
我用它来关闭模态视图,以便我可以返回原始视图。