如何自定义ShareKit操作表?

She*_*lam 14 iphone cocoa-touch objective-c sharekit

我正在使用ShareKit(www.getsharekit.com)将我的网址分享到Twitter和Facebook.我希望能够删除它指向的所有其他社交网络,但我不确定在哪里编辑?

小智 49

在SHK.m找到这个方法

+ (NSArray *)favoriteSharersForType:(SHKShareType)type
Run Code Online (Sandbox Code Playgroud)

并改变

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;
Run Code Online (Sandbox Code Playgroud)

对于switch语句的每个实例,以下内容:

favoriteSharers = [NSArray arrayWithObjects:@"SHKFacebook", nil];
Run Code Online (Sandbox Code Playgroud)

或者您想要支持的其他选项(例如,如果您只想要Twitter和Facebook将@"SHKTwitter"添加到数组中)

这将消除其他选项,但显示选项的操作表不会反映更改,它仍将提供更多选项,我们还需要禁用它.

所以要做到这一点去SHKActionSheet.m

在这种方法中,您可以将标题从"分享"更改为更具体的内容(此部分是可选的)即"与Facebook和Twitter共享"

+ (SHKActionSheet *)actionSheetForType:(SHKShareType)type
Run Code Online (Sandbox Code Playgroud)

更改

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;
Run Code Online (Sandbox Code Playgroud)

比同样的方法,删除这一行

    // Add More button
[as addButtonWithTitle:SHKLocalizedString(@"More...")];
Run Code Online (Sandbox Code Playgroud)

这将删除更多按钮,但现在代码现在将更多按钮与取消按钮混淆,所以要解决这个问题,请转到此方法:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated
Run Code Online (Sandbox Code Playgroud)

并删除以下if语句

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

这个方法的主要目的是获取通常更多按钮的按钮并打开更多选项.因此,通过删除它,代码与取消按钮没有相关的操作,因此它只是关闭并释放操作表,有效地创建取消按钮


Den*_*cik 14

来自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]];
}
Run Code Online (Sandbox Code Playgroud)

赞成就像:

[NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook",@"SHKReadItLater",nil]
Run Code Online (Sandbox Code Playgroud)

类型是SHKShareType:

typedef enum 
{
    SHKShareTypeUndefined,
    SHKShareTypeURL,
    SHKShareTypeText,
    SHKShareTypeImage,
    SHKShareTypeFile
} SHKShareType;
Run Code Online (Sandbox Code Playgroud)


jpt*_*ung 7

使用最新版本的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's 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];
}
Run Code Online (Sandbox Code Playgroud)