如何推送两个VC但只展示顶级VC

时间:2018-02-04 16:55:43

标签: ios iphone swift uiviewcontroller

我想模仿ios中的联系人列表。当单击+按钮添加联系人时,会显示一个新的视图控制器,为您提供输入联系人姓名的文本字段以及用于保存该联系人的其他信息。点击完成按钮后,显示的下一个视图控制器似乎已嵌入导航控制器中,并带有一个按钮,可将您带回联系人列表。我已经尝试了在这里找到的代码,但它将3个视图推送到导航堆栈

 //first attempt
 var controllers = navigationController?.viewControllers
 controllers?.append(secondVc)
 controllers?.append(thirdVC)
 navigationController?.setViewControllers(controllers!, animated: true)

 //second attempt
 let pushVC = UIViewController()
 let backVC = UIViewController()

 if let navigationController = navigationController {
    navigationController.pushViewController(pushVC, animated: true)
    let stackCount = navigationController.viewControllers.count
    let addIndex = stackCount - 1
    navigationController.viewControllers.insert(backVC, atIndex: addIndex)
 }

我也尝试了其他看似狡猾的组合。这就是我想要的样子:documentation

2 个答案:

答案 0 :(得分:3)

这应该有效:

navigationController.pushViewController(secondVc, animated:false)
navigationController.pushViewController(thirdVc, animated:true)

答案 1 :(得分:2)

Apple通过提供新窗口以及创建新联系人的表单来做同样的事情。

将新窗口设为keyWindow后,他们将联系人详细信息VC推送到原始窗口上的导航控制器。这种推动发​​生在后台,用户无法见证。

您可以通过将调试程序附加到“联系人”应用程序来查看相同内容。

下面是视图层次结构的屏幕截图。您将能够看到CNContactContentViewController下面的原始窗口中没有视图控制器。

Contacts app add contact view heirarchy

当用户点击完成时,原始窗口将恢复为keyWindow,并更新联系人详细信息VC以显示新添加的联系人。