接下来就是如何将装逼进行到底
如何创建 Quick Action 也就是重按 app 图标时弹出的那几个菜单
imooc 免费 IT 教育
正如上面的图中有两个Action Item 【历史记录】【查看下载】
每个 Action 都是使用 UIApplicationShortcutItem 这个对象进行创建的
下面列出每一个 UIApplicationShortcutItem 中能够包含的信息:
名称描述必须
UIApplicationShortcutItemTypeitem事件的唯一标示、通过茨表示可以确定点击的那个itemYES
UIApplicationShortcutItemTitleitem的标题、subtitle为空时、title过长可能会换行显示YES
UIApplicationShortcutItemSubtitleitem的子标题、在title下方以小文字显示NO
UIApplicationShortcutItemIconTypeitem图标枚举、系统的样式NO
UIApplicationShortcutItemIconFile自定义item图标、大小为 35*35 的单一颜色样式呈现、 如果设置此项 UIApplicationShortcutItemIconType 将会失效NO
UIApplicationShortcutItemUserInfo以字典的形式 key : valueNO
* Home Screen Quick Action 的创建 有两种方式
1.静态2.动态
* 需要注意的是每个App最多能够显示4个ActionItem,4个ActionItem,4个ActionItem重要的事情要说 三 遍 最多4个ActionItem支持【静态方式】和【动态方式】同时存在、并不会冲突如果你比较够叛逆、够任性、同时使用了【静态】和【动态】方式那么你给 UIApplication 的 shortcutItems 这个数组赋值的时候并不会覆盖、并不会覆盖、并不会覆盖我又说了三遍... 见谅
静态方式
静态创建的方式是在项目的 Info.plist 文件中添加数组即可
UIApplicationShortcutItemsUIApplicationShortcutItemTypedownloadUIApplicationShortcutItemTitle历史记录UIApplicationShortcutItemSubtitleUIApplicationShortcutItemIconFileshortcut_history.pngUIApplicationShortcutItemUserInfo******UIApplicationShortcutItemTypedownloadUIApplicationShortcutItemTitle查看下载UIApplicationShortcutItemSubtitleUIApplicationShortcutItemIconFileshortcut_download.pngUIApplicationShortcutItemUserInfo******
动态方式
动态方式需要在 application didFinishLachingWithOption: 方法中实现
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {if(self.forceTouchCapability==UIForceTouchCapabilityAvailable) {// 为了更直观的阅读代码 这里分成两行写UIApplicationShortcutIcon*historyIcon; historyIcon = [UIApplicationShortcutIconiconWithTemplateImageName:@"shortcut_history"];UIApplicationShortcutItem*historyItem = [[UIApplicationShortcutItemalloc] initWithType:@"history"localizedTitle:@"历史记录"localizedSubtitle:nilicon:historyIcon userInfo:nil];// 为了更直观的阅读代码 这里分成两行写UIApplicationShortcutIcon*downloadIcom; downloadIcom = [UIApplicationShortcutIconiconWithTemplateImageName:@"shortcut_download"];UIApplicationShortcutItem*downloadItem = [[UIApplicationShortcutItemalloc] initWithType:@"download"localizedTitle:@"查看下载"localizedSubtitle:nilicon:downloadIcom userInfo:nil]; application.shortcutItems= @[historyItem, downloadItem]; }}
关于Quick Action 中 item 的点击事件 回调响应
- (void)application:(UIApplication*)application performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completionHandler:(void(^)(BOOL))completionHandler {}
我可以从 shortcutItem 的 type 和 userinfo 来做不同的事件处理
而最后的 completionHandler 在 API 的说明中我们看到当应用并非在后台
而是直接重新开进程的时候,会直接返回NO 这样的话我们的回调会放在
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
这时候 UIApplication 刚好提供了一个可以从 launchOptions 这个字典中
获取到 shortcutItem 的 keyUIApplicationLaunchOptionsShortcutItemKey
有了这个Key 我们就可以处理不同的事件
UIApplicationShortcutItem*item;// 为了更直观的阅读代码 这里分成两行写item = [launchOptions valueForKey:UIApplicationLaunchOptionsShortcutItemKey];
这样我们根据获取到不同的 Action Item 来处理不同的事件
在 performActionForShortcutItem 回调中
- (void)application:(UIApplication*)application performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem completionHandler:(void(^)(BOOLsucceeded))completionHandler {if([shortcutItem.typeisEqualToString:@"history"]) {NSLog(@"历史记录"); }elseif([shortcutItem.typeisEqualToString:@"download"]){NSLog(@"查看下载"); }if(completionHandler) { completionHandler(YES); }}