Как настроить таблицу действий ShareKit?

Я использую ShareKit (www.getsharekit.com), чтобы поделиться своим URL-адресом с Twitter и Facebook. Я хочу, чтобы удалить всю дополнительную социальную сеть, на которую он указывает, но не уверен, где редактировать?

Ответы

Ответ 1

От ShareKit/Core/SHK.m:

[SHK setFavorites: (NSArray *)favs forType:(SHKShareType)type]

+ (void)setFavorites:(NSArray *)favs forType:(SHKShareType)type
{
    [[NSUserDefaults standardUserDefaults] setObject:favs forKey:[NSString stringWithFormat:@"%@%i", SHK_FAVS_PREFIX_KEY, type]];
}

favs выглядит следующим образом:

[NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]

тип SHKShareType:

typedef enum 
{
    SHKShareTypeUndefined,
    SHKShareTypeURL,
    SHKShareTypeText,
    SHKShareTypeImage,
    SHKShareTypeFile
} SHKShareType;

Ответ 2

в SHK.m найти этот метод

+ (NSArray *)favoriteSharersForType:(SHKShareType)type

и измените

switch (type) 
    {
        case SHKShareTypeURL:
            favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil];
            break;

        case SHKShareTypeImage:
            favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil];
            break;

        case SHKShareTypeText:
            favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil];
            break;

        case SHKShareTypeFile:
            favoriteSharers = [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil];
            break;

для каждого экземпляра оператора switch:

favoriteSharers = [NSArray arrayWithObjects:@"SHKFacebook", nil];

или любые другие параметры, которые вы хотите поддержать (т.е. если вы хотите только добавить твиттер и facebook добавить "SHKTwitter" к массиву)

который устранит другие параметры, но лист действий, который отображает параметры, не отражает изменение, и он все равно предоставит больше опции, которую также необходимо отключить.

Итак, для этого перейдите в SHKActionSheet.m

в этом методе вы можете изменить заголовок с "Share" на что-то более конкретное (эта часть необязательна), то есть "Поделиться с Facebook и Twitter"

+ (SHKActionSheet *)actionSheetForType:(SHKShareType)type

изменить

SHKActionSheet *as = [[SHKActionSheet alloc] initWithTitle:SHKLocalizedString(@"PUT YOUR NEW TITLE HERE")
                                                  delegate:self
                                         cancelButtonTitle:nil
                                    destructiveButtonTitle:nil
                                         otherButtonTitles:nil];
as.item = [[[SHKItem alloc] init] autorelease];
as.item.shareType = type;

чем в том же методе, удалите эту строку

    // Add More button
[as addButtonWithTitle:SHKLocalizedString(@"More...")];

который удалит больше кнопки, но теперь код теперь путает больше кнопки с кнопкой отмены, поэтому, чтобы исправить это, перейдите к этому методу:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

и удалите следующую команду if if

// More
else if (buttonIndex == sharers.count)
{
    SHKShareMenu *shareMenu = [[SHKCustomShareMenu alloc] initWithStyle:UITableViewStyleGrouped];
    shareMenu.item = item;
    [[SHK currentHelper] showViewController:shareMenu];
    [shareMenu release];
}

то, что этот метод вызывает подозрение, - это взять кнопку, которая обычно больше, чем кнопка, и открыть больше параметров. Таким образом, удаляя его, код не имеет связанного действия с кнопкой отмены, поэтому он просто закрывает и отпускает лист действий, эффективно создавая кнопку отмены

Ответ 3

Новый способ сделать это с последней версией ShareKit 2.0 - это перезаписать следующие методы в вашем SHKConfigurator (расширение DefaultSHKConfigurator.m)

// SHKActionSheet settings
- (NSNumber*)showActionSheetMoreButton {
    return [NSNumber numberWithBool:true];// Setting this to true will show More... button in SHKActionSheet, setting to false will leave the button out.
}

/*
 Favorite Sharers
 ----------------
 These values are used to define the default favorite sharers appearing on ShareKit action sheet.
 */
- (NSArray*)defaultFavoriteURLSharers {
    return [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook", @"SHKReadItLater", nil];
}
- (NSArray*)defaultFavoriteImageSharers {
    return [NSArray arrayWithObjects:@"SHKMail",@"SHKFacebook", @"SHKCopy", nil];
}
- (NSArray*)defaultFavoriteTextSharers {
    return [NSArray arrayWithObjects:@"SHKMail",@"SHKTwitter",@"SHKFacebook", nil];
}

Ответ 5

Посмотрите мой ответ на другой поток с более подробным объяснением.

теперь он легко настраивается без изменения кода ShareKit, если вы используете ShareKit 2.0

В принципе, если вы используете только Facebook и Twitter, проще не связываться с кодом ShareKit. Вы можете легко создайте свой собственный UIActionSheet двумя кнопками и вызовите методы ShareKit для удобства.

Ответ 6

Чтобы нежелательные службы не отображались в листе действий, вы можете просто удалить из проекта соответствующие классы сервисов доступа.

Перейдите в проект → Разделители → Службы → выберите файлы .h и .m соответствующей службы и удалите ее.

Например, вариант Facebook можно удалить, удалив SHKFacebook.h и SHKFacebook.m.

Примечание. Чтобы избежать ошибок, вам необходимо проверить импорт класса.

Ответ 7

Самый простой способ - отредактировать "SHKSharers.plist" и сохранить нужные вам службы.