斯威夫特 3:popToViewController 不工作
Posted
技术标签:
【中文标题】斯威夫特 3:popToViewController 不工作【英文标题】:Swift 3: popToViewController not working 【发布时间】:2017-04-21 09:35:58 【问题描述】:在我的应用程序中,我有三个表视图控制器,然后可能有许多 UIViewController,如果用户在任何时候按下回,每个控制器都必须返回到第一个表视图控制器。我不希望用户不得不返回可能数百页。这就是我有趣的判断用户是否按下了后退按钮并且它可以打印消息
override func viewWillDisappear(_ animated: Bool)
if !movingForward
print("moving back")
let startvc = self.storyboard!.instantiateViewController(withIdentifier: "FirstTableViewController")
_ = self.navigationController!.popToViewController(startvc, animated: true)
我已经搜索过,到目前为止没有一个解决方案有效。
【问题讨论】:
【参考方案1】:popToViewController
无法以您尝试的方式工作您正在传递FirstTableViewController
的全新引用,而不是导航堆栈中的引用。因此,您需要遍历navigationController?.viewControllers
并找到FirstTableViewController
,然后使用FirstTableViewController
的实例调用popToViewController
。
for vc in (self.navigationController?.viewControllers ?? [])
if vc is FirstTableViewController
_ = self.navigationController?.popToViewController(vc, animated: true)
break
如果您想移动到第一个屏幕,那么您可能正在寻找popToRootViewController
而不是popToViewController
。
_ = self.navigationController?.popToRootViewController(animated: true)
【讨论】:
哦,不知道。有用!但是有一点延迟。它首先加载上一个视图,然后跳转到我想要的视图。有什么办法解决这个问题? @Filipe 将动画设置为false
,因为您在 ``viewWillDisappear` 中调用它
@Filipe 您的上一个正在显示,因为您已将此代码放在 viewWillDisappear
中,而不是您需要将自定义后退栏按钮设置为 leftBarButtonItem 并通过该方法的操作添加此代码
@NiravD 如何在使用 popToViewController 时传递黑白视图控制器的值???
@ArgaPK 处理这种情况的最佳方法是将协议/委托与某些 Utill 类的共享实例一起使用。【参考方案2】:
试试这个:
let allViewController: [UIViewController] = self.navigationController!.viewControllers as [UIViewController];
for aviewcontroller : UIViewController in allViewController
if aviewcontroller .isKindOfClass(YourDestinationViewControllerName)// change with your class
self.navigationController?.popToViewController(aviewcontroller, animated: true)
【讨论】:
也可以,但是我遇到了与其他解决方案相同的问题,即在转到所需的视图之前仍会显示先前的视图。有什么办法吗? 上一个视图?【参考方案3】:如果您在回调中,尤其是异步网络回调中,您可能不在主线程上。如果这是你的问题,解决方案是:
DispatchQueue.main.async
self.navigationController?.popToViewController(startvc, animated: true)
系统调用viewWillDisappear()
总是在主线程上调用。
【讨论】:
以上是关于斯威夫特 3:popToViewController 不工作的主要内容,如果未能解决你的问题,请参考以下文章