2010-10-24 43 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」,並保持您需要的服務。