如何为UIApplicationShortcutItem添加5个快捷项?为何仅显示4个?
iOS应用快捷项(UIApplicationShortcutItem)支持5个吗?
首先明确说:iOS确实支持最多5个应用快捷项,你提到的LinkedIn能显示5个就是很好的例子。你遇到只显示4个的情况,大概率是以下几个原因之一:
- 系统默认快捷项占用了名额:如果你的应用支持Handoff、或者有系统自动生成的“继续上次操作”类快捷项,这个默认项会被自动加入到
shortcutItems数组中,占用一个位置。这样你自己添加的5个就会被挤掉一个,最终只显示4个自定义项。你可以调试时打印application.shortcutItems数组,看看是否有额外的系统项。 - 存在无效的快捷项:如果某个自定义快捷项的
type字段重复、localizedTitle为空,或者参数配置不符合要求,系统会自动忽略这个无效项。比如你添加了5个,但其中一个因为参数问题被过滤,就只会显示4个有效的。 - 代码设置时机或覆盖问题:如果你只在
application:didFinishLaunchingWithOptions:里设置了快捷项,后续可能有其他代码(比如后台唤醒后的逻辑)覆盖了shortcutItems数组,导致总数减少。建议在applicationDidBecomeActive:中也检查并重新设置,确保数组始终包含你需要的5个项。
这里给一个正确添加5个快捷项的示例代码(Objective-C):
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // 逐个创建符合要求的快捷项 UIApplicationShortcutItem *item1 = [[UIApplicationShortcutItem alloc] initWithType:@"com.yourapp.search" localizedTitle:@"搜索内容" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSearch] userInfo:nil]; UIApplicationShortcutItem *item2 = [[UIApplicationShortcutItem alloc] initWithType:@"com.yourapp.add" localizedTitle:@"添加新内容" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeAdd] userInfo:nil]; UIApplicationShortcutItem *item3 = [[UIApplicationShortcutItem alloc] initWithType:@"com.yourapp.favorites" localizedTitle:@"我的收藏" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeFavorite] userInfo:nil]; UIApplicationShortcutItem *item4 = [[UIApplicationShortcutItem alloc] initWithType:@"com.yourapp.share" localizedTitle:@"分享应用" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeShare] userInfo:nil]; UIApplicationShortcutItem *item5 = [[UIApplicationShortcutItem alloc] initWithType:@"com.yourapp.settings" localizedTitle:@"设置" localizedSubtitle:nil icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeSettings] userInfo:nil]; // 赋值给应用的shortcutItems属性 application.shortcutItems = @[item1, item2, item3, item4, item5]; return YES; }
Swift版本示例:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let item1 = UIApplicationShortcutItem(type: "com.yourapp.search", localizedTitle: "搜索内容", localizedSubtitle: nil, icon: UIApplicationShortcutIcon(type: .search), userInfo: nil) let item2 = UIApplicationShortcutItem(type: "com.yourapp.add", localizedTitle: "添加新内容", localizedSubtitle: nil, icon: UIApplicationShortcutIcon(type: .add), userInfo: nil) let item3 = UIApplicationShortcutItem(type: "com.yourapp.favorites", localizedTitle: "我的收藏", localizedSubtitle: nil, icon: UIApplicationShortcutIcon(type: .favorite), userInfo: nil) let item4 = UIApplicationShortcutItem(type: "com.yourapp.share", localizedTitle: "分享应用", localizedSubtitle: nil, icon: UIApplicationShortcutIcon(type: .share), userInfo: nil) let item5 = UIApplicationShortcutItem(type: "com.yourapp.settings", localizedTitle: "设置", localizedSubtitle: nil, icon: UIApplicationShortcutIcon(type: .settings), userInfo: nil) application.shortcutItems = [item1, item2, item3, item4, item5] return true }
排查建议:调试时在控制台输入po application.shortcutItems,查看实际数组中的元素数量和内容,就能快速定位是哪个环节出了问题。
内容的提问来源于stack exchange,提问作者Aybek Can Kaya
相关产品推荐
相关产品推荐

