我对iOS和Swift没什么经验,我正在尝试创建一个SlideOut菜单,或者在Android上调用的NavigationDrawer。 到目前为止,我正在使用这个library(由JonkyKong创建的SideMenu)因为它可以轻松定制,并且如GitHub上的Read-Me所述,它可以在所有屏幕上全局使用。
这是我的问题:在我的菜单上tableViewController
我有两个storyboard segues
,一个到主故事板,一个到第二个故事板。如果我切换到第二个故事板,当我尝试打开菜单时,应用程序崩溃时出现以下错误:Application tried to present modally an active controller
。
在我的AppDelegate.swift文件中,我写了didFinishLaunchingWithOptions
函数:
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// I've placed the menu ViewController on it's own storyboard, so I load it here to be used in the next line
let navDrawerStoryBoard = UIStoryboard.init(name: "NavDrawer", bundle: nil)
// Loads the menu
SideMenuManager.menuLeftNavigationController = navDrawerStoryBoard.instantiateViewController(withIdentifier: "LeftMenuNavigationController") as? UISideMenuNavigationController
// Here I'm setting a gesture recognizer to show the menu
SideMenuManager.menuAddScreenEdgePanGesturesToPresent(toView: window!)
return true
}
我还将我的项目上传到GitHub,以防有人需要它:sideMenuTest
感谢您的帮助。
答案 0 :(得分:1)
您正在获得该主要异常,因为您在已打开的菜单上以模态方式呈现第二个视图。
SideMenu在所有视图中共享一个菜单实例,因此如果菜单已在模态第二视图下方打开,则再次打开它会导致您看到的异常。
上面的解决方案是在故事板中使用“显示”segue类型而不是模态板:
然后,在执行show之后,您还需要在NavigationController中嵌入初始视图:
最后*,如果您想要顺利导航回到第一个屏幕,则需要在推送时跳过导航控制器。在NavDrawer故事板中,为故事板参考添加ID:
* 在我的测试中,我不得不将segue删除到第一个屏幕并重新创建它以使其工作。
答案 1 :(得分:0)
尝试添加
//this should be the view controller you want to show
self.window?.rootViewController = SideMenuManager.menuLeftNavigationController
self.window?.makeKeyAndVisible()
并最好在viewDidLoad
ViewController
中添加手势
答案 2 :(得分:0)
尝试将每个视图控制器嵌入到导航视图控制器中。