Пример кода в динамических UIApplicationShortcutItems (Objective-C)

Я ищу некоторый пример кода для динамического UIApplicationShortCutItem с использованием языка Objective-C.

В принципе, у меня есть три статических UIApplicationShortcutItems, и я просто хочу их отображать, когда конкретное логическое значение в моем приложении истинно. Я предполагаю, что вы не можете изменить видимое состояние статического UIApplicationShortCutItem, поэтому я ищу простой способ добавления динамических UIApplicationShortCutItem s.

Кто-нибудь знает хороший учебник (Objective-C) об этом или даже имеет некоторый пример кода для добавления динамического UIApplicationShortCutItem в мое приложение?

Ответ 1

Вы можете использовать следующий код для добавления shortcutitem для динамического приложения:

UIApplicationShortcutIcon * photoIcon = [UIApplicationShortcutIcon iconWithTemplateImageName: @"selfie-100.png"]; // your customize icon
UIApplicationShortcutItem * photoItem = [[UIApplicationShortcutItem alloc]initWithType: @"selfie" localizedTitle: @"take selfie" localizedSubtitle: nil icon: photoIcon userInfo: nil];
UIApplicationShortcutItem * videoItem = [[UIApplicationShortcutItem alloc]initWithType: @"video" localizedTitle: @"take video" localizedSubtitle: nil icon: [UIApplicationShortcutIcon iconWithType: UIApplicationShortcutIconTypeCaptureVideo] userInfo: nil];

[UIApplication sharedApplication].shortcutItems = @[photoItem,videoItem];

Ответ 2

Я опубликовал простой пример objective-c в GitHub, который добавляет/удаляет ярлыки на главный экран.

Вы можете проверить это здесь: https://github.com/cjimenezpacho/3Dtouch-home-screen-quick-actions

У меня есть метод в App Delegate, который обрабатывает ярлыки (на основе другого ответа stackoverflow, который я не могу найти:():

- (BOOL)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem {
    BOOL handled = NO;

    if (shortcutItem == nil) {
        return handled;
    }

    handled = YES;
    UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Handle Shortcut" message:shortcutItem.type delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil];
    [av show];

    return handled;

}

Он вызывается приложением: didFinishLaunchingWithOptions и application: performActionForShortcutItem, запущено ли приложение или нет.

И добавить/удалить ярлыки по запросу:

- (void) addActionToShortCutItems{
    NSArray <UIApplicationShortcutItem *> *existingShortcutItems = [[UIApplication sharedApplication] shortcutItems];
    if([existingShortcutItems count]){
        NSMutableArray <UIApplicationShortcutItem *> *updatedShortcutItems = [existingShortcutItems mutableCopy];
        NSInteger numberOfActions = [existingShortcutItems count];
        [updatedShortcutItems addObject:[self createItemNumber:numberOfActions]];
        [[UIApplication sharedApplication] setShortcutItems: updatedShortcutItems];
    }else{
        [UIApplication sharedApplication].shortcutItems = @[[self createItemNumber:0]];
    }
}

- (UIApplicationShortcutItem*)createItemNumber:(NSInteger)number{
    UIApplicationShortcutItem *newItem = [[UIApplicationShortcutItem alloc]initWithType:[NSString stringWithFormat:@"type%ld",number]
                                                                         localizedTitle:[NSString stringWithFormat: NSLocalizedString(@"Action %ld", nil),number]
                                                                      localizedSubtitle:nil
                                                                                   icon:nil
                                                                               userInfo:nil];
    return newItem;

}

- (void) removeActionToShortCutItems{
    NSArray <UIApplicationShortcutItem *> *existingShortcutItems = [[UIApplication sharedApplication] shortcutItems];
    NSMutableArray <UIApplicationShortcutItem *> *updatedShortcutItems = [existingShortcutItems mutableCopy];
    [updatedShortcutItems removeObjectAtIndex:[updatedShortcutItems count]-1];
    [[UIApplication sharedApplication] setShortcutItems: updatedShortcutItems];
}

Надеюсь, что это поможет, и обратная связь приветствуется!

Ответ 3

Здесь, как определить, было ли приложение запущено с быстрым ярлыком в Objective-c.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

UIApplicationShortcutItem *shortcutItem = [launchOptions objectForKey:UIApplicationLaunchOptionsShortcutItemKey];
    if(shortcutItem){
        [self handleShortCutItem:shortcutItem];
    }
}

- (void)handleShortCutItem:(UIApplicationShortcutItem *)shortcutItem  {
    if([shortcutItem.type isEqualToString:@"takePhotoAction"]){
        //ACTION HERE
    }
}

Чтобы определить тип ярлыка, выбранный во время работы приложения в фоновом режиме.

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler {
NSLog(@"%@", shortcutItem.type);
    if([shortcutItem.type isEqualToString:@"takePhotoAction"]){
        //ACTION HERE
    }
}