【发布时间】:2016-01-28 15:51:54
【问题描述】:
当从主屏幕使用 3D Touch Shortcuts 时,我试图切换到不同的视图控制器。
应用程序嵌入在UITabBarController 中,每个选项卡根控制器都是UINavigationController。
这是我尝试处理快捷方式以为每个快捷方式加载视图控制器的方式。
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let sb = UIStoryboard(name: "main", bundle: nil)
let helloVC = sb.instantiateViewControllerWithIdentifier("HelloVC") as! HelloViewController
let goodbyeVC = sb.instantiateViewControllerWithIdentifier("GoodbyeVC") as! GoodbyeViewController
switch shortcutItemType {
case .Hello:
rootViewController.presentViewController(helloVC, animated: true, completion: nil)
break
case .Goodbye:
rootViewController.presentViewController(goodbyeVC, animated: true, completion: nil)
break
}
}
}
使用此代码,快捷方式仅将应用程序打开到初始视图控制器,而不是打开到位于不同选项卡中的 helloVC 和 goodbyeVC 控制器。
我假设这是因为我尝试加载的 ViewControllers 嵌入在 UINavigationController 中以及嵌入在 UITabBarController 中。
我怎样才能 presentViewController 嵌入在 UITabBarController 和 UINavigationController 中?
更新
我不确定以下是否有效,因为我的 atm 没有 iPhone 6S。但我已将代码更改为以下代码,希望这将在执行 3D 触摸操作时加载选定的选项卡索引。从那里它应该向视图控制器发布通知以执行转场。
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
if let rootViewController = window?.rootViewController, let shortcutItemType = ShortcutItemType(shortcutItem: shortcutItem) {
let tababarController = rootViewController as! UITabBarController
switch shortcutItemType {
case .Hello:
tababarController.selectedIndex = 1
NSNotificationCenter.defaultCenter().postNotificationName("performsegueHello", object: nil)
break
case .Goodbye:
tababarController.selectedIndex = 4
NSNotificationCenter.defaultCenter().postNotificationName("performsegueGoodbye", object: nil)
break
}
}
}
【问题讨论】:
-
你检查过 rootViewController.presentViewController(helloVC, animated: true, completion: nil) 或 rootViewController.presentViewController(goodbyeVC, animated: true, completion: nil) 被调用了吗?
-
您是否研究过所谓的“协调员”模式?这是在移动应用程序中封装导航的一种有用方式。 iamsim.me/the-coordinator-pattern
标签: ios swift uinavigationcontroller uitabbarcontroller presentviewcontroller