2010-10-24 76 views

回答

14

从ShareKit /核心/ 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]]; 
} 

的收藏是这样的:

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

类型是SHKShareType:

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

在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]; 

或什么都其他选项要支持(也就是说,如果你只是想twitter和facebook添加@“SHKTwitter”,以阵列)

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

因此,要做到这一点去SHKActionSheet.m

这个方法,你可以标题从“共享”更改为更具体的东西(这部分是可选的),即“共享与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 

并删除以下else if语句可

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

这种方法是悬而未决的是采取按钮通常是更多的按钮,并打开更多的选项。因此,通过删除代码与取消按钮没有关联的操作,因此它只是关闭并释放操作表,有效地创建取消按钮。

+0

希望我可以给你10个upvotes这样一个彻底的解释。这正是我需要的 - 谢谢! – 2011-01-19 05:54:11

+0

多好的回答。我在一段时间内看到的最好的东西......以及像我这样的低代表的人! – 2011-07-25 22:10:28

+0

高超的解释..加上10个投票 – Hadi 2011-07-28 07:35:23

2

请参阅my answer在其他线程上进行更全面的说明。

现在是在不改变ShareKit的代码很容易配置,如果使用ShareKit 2.0

基本上,如果你只使用Facebook和Twitter,很容易不惹ShareKit的代码。您可以轻松地使用两个按钮创建您自己的UIActionSheet,并调用ShareKit's convenience share方法。

+0

想知道为什么投票? “与ShareKit的代码混乱”我的意思是自定义ShareKit的代码在你的应用程序(隐藏更多按钮),当它不是必要的。如果您想升级到较新版本的ShareKit,这将为您赢得额外的工作。您可以使用ShareKit的共享器便捷方法直接使用经典的标准UIActionSheet实现相同的功能。 – 2011-12-02 13:28:18

2

对于不需要的服务不会出现在操作表上,您可以简单地从项目中删除相应的共享服务类。

转到项目 - >共享程序 - >服务 - >选择相应服务的.h和.m文件并将其删除。

例如,可以通过删除SHKFacebook.h和SHKFacebook.m来删除Facebook选项。

注意:您必须检查课程导入以避免错误。

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]; 
} 
0

最简单的方法是编辑“SHKSharers.plist”,并保持您需要的服务。