午餐后静态 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 不显示导航和标签栏的主要内容,如果未能解决你的问题,请参考以下文章

iOS 3D Touch

iOS 14 并未移除 3D Touch 功能,苹果官方:暂时不可用

带导航控制器的 3D Touch Peek/Pop

Sencha Touch 2:如何在导航视图中显示列表?

iOS 14移除3D Touch?苹果:暂时不可用!

Android App 快捷方式之 Android 版本的 3D Touch