当在主屏幕上使用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
?
更新
我不确定以下是否有效,因为我没有iPhone 6S和我一起使用。但我已将代码更改为以下内容,希望这将在执行3D Touch Action时加载选定的选项卡索引。从那里它应该向视图控制器发布通知以执行segue。
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
}
}
}
答案 0 :(得分:1)
请尝试以下代码。我认为你没有到达标签栏的导航控制器。你可以这样做: 让insideNvc = tvc?.selectedViewController为? UINavigationController的
现在,您可以使用导航控制器来呈现或推送任何内容。
private func handleShortcutItem(shortcutItem: UIApplicationShortcutItem) {
let nvc = self.window?.rootViewController as? UINavigationController
let tvc = nvc?.topViewController as? TabBarController
let insideNvc = tvc?.selectedViewController as? UINavigationController
if 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:
insideNvc?.presentViewController(helloVC, animated: true, completion: nil)
break
case .Goodbye:
insideNvc?.presentViewController(goodbyeVC, animated: true, completion: nil)
break
}
}
}