今天突然心血来潮想研究一下iOS的QuickAction(也就是桌面3D Touch弹出的菜单)
*iOS 13长按app也能弹出QuickAction
照着教程来却发现
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
这个方法无论如何都不会执行
再看代码和别人的基本一模一样。
然后就怀疑是不是Xcode11更新后出的问题,去搜了一下对应的新特性。
发现Xcode11新建的项目 多了一个叫SceneDelegate的文件
现在UI的生命周期交给了SceneDelegate来管理,所以要修改UI,获取shortcutItem都得在SceneDelegate中执行了。
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
UIApplicationShortcutItem *shortcutItem = connectionOptions.shortcutItem;
if (shortcutItem) {
.......//根据点击的shortcutItem执行的操作
//比如我这里是vc.label.text = shortcutItem.localizedTitle;
}
以及原来的Appdelegate中的方法
- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
改到SceneDelegate中执行
- (void)windowScene:(UIWindowScene *)windowScene performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
参考文章:
iOS 3D Touch(一) Home Screen Quick Actions
Xcode11新变化:SceneDelegate