2017-09-26 160 views
1

我在呈现视图控制器后推动另一个视图控制器与动画作为我的应用程序需要它。它的代码如下:解除视图控制器不会返回到前一个视图控制器

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) 
    } 

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

回答

0

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

你的代码进一步看...

您似乎在HomeSearchViewControllernavigationController堆栈,然后也HomeSearchViewController呈现SearchRideViewController

但是......

在:

HomeSearchViewController viewDidLoad() 

您创建的

SideBarViewController (leftViewController) 

一个实例,并为您打造

SlideMenuTrackerController (slideMenuController) 

一个实例,并指定

self as the .mainViewController and 
leftViewController as the .leftMenuViewController 
of slideMenuController. 

如果这还不够混乱,也:

AppDelegate.sharedInstance().window?.rootViewController = slideMenuController 

取代HomeSearchViewController ......你刚刚压入堆栈navigationController

所以,你的视图层次是现在(或者,至少,似乎是,如果我下面的代码):

Window 
    slideMenuController (instance of SlideMenuTrackerController) 
     +- searchViewController (instance of SearchRideViewController) 
     +- leftViewController (instance of SideBarViewController) 

为了“找回”你来自哪里,你会需要重新创建你想要的任何VC,并(再次)替换AppDelegate.sharedInstance().window?.rootViewController

没有看到你的整个项目,我不知道你应该怎么做。


[原创答案]

在这里:

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

}

viewcontrollerviewcontroller.present(searchViewController!...(这是一个有点奇怪到开始的,但不管)...

然后在这里:

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

.dismiss视图控制器,但你永远不回.pop导航控制器的堆栈。

+0

所以我现在需要做什么? –

+0

你的意思是用流行音乐取代消遣吗? –

+0

查看'UINavigationController.popViewController(animated:Bool)'的文档。 – DonMag

0

为了关闭视图控制器,您的视图控制器应该嵌入到导航控制器中。

如:

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) 
} 

干杯!

相关问题