Ios 解除视图控制器不会返回到上一个视图控制器

Ios 解除视图控制器不会返回到上一个视图控制器,ios,swift,swift3,uiviewcontroller,Ios,Swift,Swift3,Uiviewcontroller,根据应用程序的要求,在推送另一个带有动画的视图控制器之后,我将演示一个视图控制器。代码如下所示: func pushViewController() { let viewcontroller = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "homeSearchIndentifier") as? HomeSearchViewController let

根据应用程序的要求,在推送另一个带有动画的视图控制器之后,我将演示一个视图控制器。代码如下所示:

    func pushViewController() {
    let viewcontroller = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "homeSearchIndentifier") as? HomeSearchViewController
    let searchViewController = UIStoryboard(name: "Home", bundle: nil).instantiateViewController(withIdentifier: "searchRideIdentifier") as? SearchRideViewController
    searchViewController?.parentView = .homeLandingPage
    let duration = 0.4
    let transition: CATransition = CATransition()
    transition.duration = duration
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionPush
    transition.subtype = kCATransitionFromBottom
    self.navigationController!.view.layer.add(transition, forKey: kCATransition)
    self.navigationController?.pushViewController(viewcontroller!, animated: false)
    viewcontroller?.present(searchViewController!, animated: true, completion: nil)
  }
在显示的视图控制器中,我正在指定一个侧菜单控制器,因为我需要在向右滑动时显示侧菜单:

override func viewDidLoad() {
    super.viewDidLoad()
    self.addSearchListScreen()
    self.locationManager.delegate = self
    yourLocation.layer.sublayerTransform = CATransform3DMakeTranslation(7, 0, 0)
    let leftViewController = UIStoryboard(name: "SideBar", bundle: nil).instantiateViewController(withIdentifier: "sideBar") as? SideBarViewController
    let slideMenuController = SlideMenuTrackerController(mainViewController: self, leftMenuViewController: leftViewController!)
    AppDelegate.sharedInstance().window?.rootViewController = slideMenuController
    leftViewController?.mainViewController = self
    slideMenuController.automaticallyAdjustsScrollViewInsets = true
    AppDelegate.sharedInstance().window?.backgroundColor = UIColor(red: 236.0, green: 238.0, blue: 241.0, alpha: 1.0)
    AppDelegate.sharedInstance().window?.makeKeyAndVisible()
  }
现在我在这个视图控制器中有了一个自定义的后退按钮。单击它时,我需要关闭视图控制器,并从显示它的位置显示视图控制器。名称为“HomeSearchViewController”

对于解雇,我在按钮操作中编写了以下代码:

    func navigateToPreviousController() {
      self.dismiss(animated: true, completion: nil)
  }

但这并不是解除视图控制器。我可以知道问题是什么吗?

编辑:我的第一个答案只解决了部分问题

进一步查看您的代码

似乎您正在
HomeSearchViewController
推到
导航控制器
堆栈上,然后
HomeSearchViewController
显示
SearchRideViewController

然而

在:

您可以创建

SideBarViewController (leftViewController)
然后创建一个

SlideMenuTrackerController (slideMenuController)
分配

self as the .mainViewController and
leftViewController as the .leftMenuViewController
of slideMenuController.
如果这还不够混乱,您还可以:

AppDelegate.sharedInstance().window?.rootViewController = slideMenuController
它取代了HomeSearchViewController。。。您刚刚将其推到
navigationController
堆栈上

因此,您的视图层次结构现在是(或者,如果我遵循您的代码,至少看起来是):

为了“回到”你来自的地方,你需要重新创建你想要访问的VC,并(再次)替换
AppDelegate.sharedInstance().window?.rootViewController

在没有看到你整个项目的情况下,我不确定你真的应该怎么做


[原答覆]

在这里:

func pushViewController() {
    // ... the other lines
    self.navigationController?.pushViewController(viewcontroller!, animated: false)
    viewcontroller?.present(searchViewController!, animated: true, completion: nil)
}

您可以从
viewcontroller
推送
viewcontroller
,也可以从
viewcontroller>推送
.present(searchViewController!…
(开始时有点奇怪,但无论如何)

然后在这里:

func navigateToPreviousController() {
    self.dismiss(animated: true, completion: nil)
}

您可以
.disclose
视图控制器,但您永远不会
.pop
回到导航控制器的堆栈上。

要解除视图控制器,您的视图控制器应该嵌入导航控制器中

func dismissButtonPressed(){
   self.dismiss(animated: true, completion: nil)
}
例如:

然后在显示的视图控制器上,如果使用以下代码,它将关闭视图控制器

func dismissButtonPressed(){
   self.dismiss(animated: true, completion: nil)
}

干杯!!

那么我现在需要做什么?你是想用pop代替Discouse吗?请查看
UINavigationController.popViewController(动画:Bool)
的文档。但是我现在的视图控制器中没有任何导航控制器。如果你在回答中发布代码,那将是一个很大的帮助亲爱的:)
let controller =storyboard.instantiateViewController(withIdentifier: "storyboardidentifier") as! yourviewcontroller        
    let navController = UINavigationController(rootViewController: controller)
    present(navController, animated: true, completion: nil) 
func dismissButtonPressed(){
   self.dismiss(animated: true, completion: nil)
}