在屏幕之间导航

Posted

技术标签:

【中文标题】在屏幕之间导航【英文标题】:Navigate between Screens 【发布时间】:2017-11-17 19:49:25 【问题描述】:

在我的应用程序中,我有复杂的导航。

我有购物详情。这是标签栏控制器的视图控制器。

当我从 Shopping Details View Controller 中选择任何 Store Name 时。它会弹出一个购物清单 View Controller,它嵌入在 Navigation Controller 中。

当从购物清单 视图控制器中选择编辑按钮时。它将弹出到另一个添加屏幕的视图控制器。它也嵌入在导航控制器中

当我从 Add Screen 中点击 save 时,它​​会转到购物清单 View Controller

当我从购物清单 View Controller 中单击 完成 按钮时。我必须导航到标签栏控制器的 Shopping Details View Controller。

请提供我的意见。如何遍历Tab Bar Controller?

我试过下面的代码。它导航到 StoreDetails View Controller。不显示标签栏项目

let storeDetails = self.storyboard?.instantiateViewController(withIdentifier: "StoreDetailsController") as! StoreDetailsController
        storeDetails.managedContext = managedContext
        storeDetails.coreData = coreData
        storeDetails.back = true
self.navigationController?.pushViewController(storeDetails, animated: false)

【问题讨论】:

【参考方案1】:

如果你这样做self.navigationController?.dismiss(animated: true),你应该回到viewController,它就在嵌入导航控制器的第一个之前,我相信它是Shipping Details(你“选择任何商店名称”的那个)。

【讨论】:

是的,我试过了。它不起作用,因为它是从添加屏幕遍历的 能不能具体遍历到标签栏 我不确定您所说的“遍历”是什么意思。无论如何,您应该尝试返回视图层次结构,而不是尝试再次加载初始视图。尝试“关闭”(返回)到您需要的视图控制器,而不是 instantiateViewControllerpushViewController 谢谢。仅当栏按钮项目单击两次时才解除其工作。我已经使用 unwindSegue 实现了。【参考方案2】:

据我所知,您正在尝试将您源自的控制器推送到堆栈而不是弹回堆栈。从您的帖子中获取整个图片有点令人困惑,您可以将故事板的那部分分享为屏幕截图吗?如果您不愿意分享故事板,您至少可以提供一个图表吗?谢谢。

编辑:

要弹回您的控制器,您可以使用以下内容:

for controller in (self.navigationController?.viewControllers)! 

  if let vc = controller as? StoreDetailsController 

    self.navigationController?.popToViewController(vc, animated: true)
  

但我真的不知道你是否不至少分享一下你的控制器是如何排列的以及它们嵌入在哪里的图表。

【讨论】:

谢谢。我发现我直接转到了视图控制器。而不是他的导航控制器。现在,当我按两次“完成”按钮时,我正面临着。屏幕呈现给根控制器。 self.dismiss(动画:真,完成:无) 听起来你已经用segue连接将控制器连接成一个圆圈。正如我之前所说,分享您的控制器连接方式的粗略图,我们将能够更好地帮助您。【参考方案3】:

因为它是相互关联的。 pushToViewController 或 popTOViewController 或驳回不起作用。所以我使用了 unwind。

StoreDetailsController: 我在 StoreDetailsController 中有以下代码

@IBAction func unwindToVC1(segue:UIStoryboardSegue) 
        print("Test")
    

在我的 ShoppingListViewController 中,我有展开完成栏按钮退出。

 @IBAction func done(_ sender: UIBarButtonItem) 
performSegue(withIdentifier: "unwindSegueToVC1", sender: self)
       

你可以点击下面的链接来放松

https://medium.com/@mimicatcodes/create-unwind-segues-in-swift-3-8793f7d23c6f

【讨论】:

以上是关于在屏幕之间导航的主要内容,如果未能解决你的问题,请参考以下文章

在屏幕之间导航

反应原生导航在屏幕之间移动

反应屏幕之间的本机导航

React-Navigation:屏幕之间的导航

计算在一个屏幕到另一个屏幕之间导航所需的时间

页面在使用 BottomTabNavigator 在 2 个屏幕之间导航时开始