Swift 3:popToViewController不工作
问题描述:
在我的应用程序中,我有三个表视图控制器,然后可能有很多UIViewControllers,每个UIViewControllers必须返回到第一个表视图控制器,如果用户在任何点回按。我不希望用户必须通过潜在的数百页才能返回。这是我会哄来确定,当用户按下后退按钮和它的作品的消息打印Swift 3:popToViewController不工作
override func viewWillDisappear(_ animated: Bool) {
if !movingForward {
print("moving back")
let startvc = self.storyboard!.instantiateViewController(withIdentifier: "FirstTableViewController")
_ = self.navigationController!.popToViewController(startvc, animated: true)
}
}
我已搜查,到目前为止,没有任何解决方案都工作过。
答
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)
答
试试这个:
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)
}
}
喔,不知道这一点。有用!但是有一个小的延迟。它首先加载前一个视图,然后跳转到我想要的视图。有任何解决这个问题的方法吗? – Filipe
@Filipe因为你在''viewWillDisappear'里面调用它,动画设置为'false' –
@Filipe你之前显示的是因为你已经把这个代码放在'viewWillDisappear'里面,而不是你需要设置自定义back bar按钮为leftBarButtonItem并用该方法的行动添加此代码 –