使用SideMenu Pod进行导航会在更改屏幕时导致错误

时间:2017-05-24 05:55:49

标签: swift3 sidebar

enter image description here我在我的应用中使用此广告连结:https://github.com/jonkykong/SideMenu作为我的边栏。我通过Storyboard设置侧栏导航。我的应用程序设计是我有一个主屏幕和一个带有按钮的侧栏,可以将我带到不同的屏幕。不同的屏幕也有相同的侧栏。我的错误是在这种情况下:我从主屏幕进入侧栏 - >然后我通过侧栏进入screen2 - >我点击屏幕2的侧栏 - >侧栏显示在底部并占据整个屏幕。 为了解决这个问题,我发现了一个不能满足我的解决方法。我知道我需要解雇侧栏但​​是如果我想进入另一个屏幕我首先看到我来自的屏幕(因为我解雇)然后它只移动到第二个屏幕。我希望这是有道理的。我希望在没有首先看到主屏幕的情况下切换到第二个屏幕。这是帮助我解雇然后更改屏幕的代码:

dismiss(animated: true, completion: {
    goIncident()
})

func goIncident(){
    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let window = appDelegate.window
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let rootController = mainStoryboard.instantiateViewController(withIdentifier: "log") as! UINavigationController

     window?.rootViewController = rootController
}

编辑:添加的照片显示了我只使用goIncident()功能而不解散的问题。如果我做了解雇,我会看到主屏幕,并且只有在主屏幕出现后才会显示新屏幕。

1 个答案:

答案 0 :(得分:0)

所以我用一种非常难看的方法来解决这个问题,但我相信这是唯一可行的方法,因为这个Pod不是很灵活,除非我错过了什么。我做的是这个:

SideBarViewController

func goLog(){
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "changeLog"), object: self)
}

MainViewController

override func viewDidLoad(){
    NotificationCenter.default.addObserver(self, selector: #selector(goLog), name: NSNotification.Name(rawValue: "changeLog"), object: nil)
}

func goLog(){
    let logViewController = self.storyboard?.instantiateViewController(withIdentifier: "IncidentLogViewController") as! IncidentLogViewController    
    self.navigationController?.viewControllers = [logViewController]
    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "dismissSideBar"), object: self)

}

因此侧栏告诉导航控制器更换其视图控制器,然后在更换后导航控制器发回通知以关闭侧栏。非常难看,但实际上工作顺利。