午餐后静态 3D Touch 不显示导航和标签栏
Posted
技术标签:
【中文标题】午餐后静态 3D Touch 不显示导航和标签栏【英文标题】:Static 3D Touch not showing navigation and tab bar after lunching 【发布时间】:2016-12-04 13:17:59 【问题描述】:当我在主屏幕上按下 3D Touch 时工作正常,但不显示导航和标签栏,如何使用 3D Touch 呈现导航和标签栏?不知道如何在应用程序启动后覆盖自定义点。 格拉齐米勒
class AppDelegate: UIResponder, UIApplicationDelegate
enum ShortcutIdentifier: String
case First
case Second
case Third
case Fourth
//Initializers
init?(fullType: String)
guard let last = fullType.components(separatedBy: ".").last else return nil
self.init(rawValue: last)
//Properties
var type: String
return Bundle.main.bundleIdentifier! + ".\(self.rawValue)"
var window: UIWindow?
/// Saved shortcut item used as a result of an app launch, used later when app is activated.
var launchedShortcutItem: UIApplicationShortcutItem?
func handleShortCutItem(_ shortcutItem: UIApplicationShortcutItem) -> Bool
var handled = false
// Verify that the provided shortcutItem type is one handled by the application.
guard ShortcutIdentifier(fullType: shortcutItem.type) != nil else return false
guard let shortCutType = shortcutItem.type as String? else return false
let storyboard = UIStoryboard(name: "Main", bundle: nil)
var vcc = UIViewController()
switch (shortCutType)
case ShortcutIdentifier.First.type:
vcc = storyboard.instantiateViewController(withIdentifier: "VC1")
handled = true
break
case ShortcutIdentifier.Second.type:
vcc = storyboard.instantiateViewController(withIdentifier: "VC2")
handled = true
break
case ShortcutIdentifier.Third.type:
vcc = storyboard.instantiateViewController(withIdentifier: "VC3")
handled = true
break
case ShortcutIdentifier.Fourth.type:
vcc = storyboard.instantiateViewController(withIdentifier: "VC4")
handled = true
break
default:
break
// Display the selected view controller
self.window?.rootViewController?.present(vcc, animated: true, completion: nil)
return handled
func application(_ application: UIApplication, performActionFor shortcutItem: UIApplicationShortcutItem, completionHandler: @escaping (Bool) -> Void)
let handledShortCutItem = handleShortCutItem(shortcutItem)
completionHandler(handledShortCutItem)
func applicationDidBecomeActive(_ application: UIApplication)
guard launchedShortcutItem != nil else return
//handleShortCutItem(shortcut)
launchedShortcutItem = nil
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
// If a shortcut was launched, display its information and take the appropriate action
if let shortcutItem = launchOptions?[UIApplicationLaunchOptionsKey.shortcutItem] as? UIApplicationShortcutItem
launchedShortcutItem = shortcutItem
return true
【问题讨论】:
【参考方案1】:如何使用 3D Touch 呈现导航和标签栏
与您在应用正常运行期间执行此操作的方式相同。你不应该做一些特殊的事情来响应用户按下快捷方式项(即你的self.window?.rootViewController?.present
,它实际上只是建立了一个临时的外观);您应该导航到快捷方式项对应的真实应用的实际区域。
【讨论】:
我不确定,你的意思是什么,这段代码在我的 AppDelegate swift 文件中,当我从主屏幕使用 3D Touch 访问时,它可以工作,但没有显示导航和标签栏!我需要把这段代码放在 ViewController 中吗? 这不是代码在哪里的问题。你在做什么的整个想法都是错误的。如果您的应用程序的某个区域具有导航控制器/标签栏,那么您对快捷菜单的响应应该是转到应用程序的该区域,就像用户导航到它一样以通常的方式——不要将一些特殊的一次性视图控制器作为演示文稿。 我知道,我做错了,它不起作用!我还是不明白你的意思,我的快捷方式只在 info.plist 中。我需要在该区域视图控制器内创建快捷方式吗?这是我的第一个应用程序,我只是在学习! 想想用户通常会如何导航到例如AddViewController。在您处理快捷方式时,您以同样的方式导航到它。依此类推,对于每个具有快捷方式的视图控制器。这是进入普通视图控制器的捷径。 再次感谢您的帮助,我真的需要一个例子来了解它是如何工作的!以上是关于午餐后静态 3D Touch 不显示导航和标签栏的主要内容,如果未能解决你的问题,请参考以下文章