[如果您的应用程序支持场景,那么当用户在跳板中长按您的应用程序图标并点击您的快捷菜单项之一时,该方法将在场景委托中调用:
windowScene(_:performActionFor:completionHandler:)
但是您的应用程序还支持多个窗口,运行时需要一种方法来了解哪个窗口场景的委托进行调用。
要回答这个问题,您的UIScene的activationConditions
必须设置为一个UISceneActivationConditions对象,该对象的canActivateForTargetContentIdentifierPredicate
和prefersToActivateForTargetContentIdentifierPredicate
适当地指定谓词。有问题的targetContentIdentifier
是UIApplicationShortcutItem的属性;它只是一个字符串,例如"myShortcutIdentifier"
。
谓词的self
是传入的targetContentIdentifier
字符串,因此谓词将如下所示:
let pred = NSPredicate(format: "self == 'myShortcutIdentifier'")
到目前为止一切顺利(如https://developer.apple.com/videos/play/wwdc2019/259/中所述)。但是,如何将目标内容标识符附加到Info.plist中定义的静态UIApplicationShortcutItem上?
如果您的应用程序支持场景,则当用户在跳板中长按您的应用程序图标并点击您的快捷菜单项之一时,该方法将在场景委托中调用:windowScene(_:...
UIApplicationShortcutItemTargetContentIdentifier
在Info.plist中设置source。然后您可以在can
上设置prefers
或UISceneActivationConditions
案例。这会触发-[UIWindowSceneDelegate windowScene:performActionForShortcutItem:completionHandler:]
上的UIWindowSceneDelegate
方法。