我已经在我的应用程序中实现了 ShareKit。我可以接受它的默认工作方式,但我希望控制可供用户选择的服务;更具体地说,我不想处理默认嵌入的所有服务,而只有 Facebook、Twitter 和 Mail。
我在 ShareKit 文件中的哪个位置进行这些设置(删除所有这些我不想处理它们的 API 等的被忽视的服务)?
您需要SHK.m
在 ShareKit 框架中进行编辑。将方法更改favoriteSharersForType:
为仅:
favoriteSharers = [NSArray arrayWithObjects:@"SHKFacebook", @"SHKTwitter", nil];
return favoriteSharers;
您可以随意添加/删除此阵列中的服务。
编辑
要删除 More... 按钮,请找到actionSheetForType
方法SHKActionSheet.m
并删除:
[as addButtonWithTitle:SHKLocalizedString(@"More...")];
完成此操作后,您将需要修复索引。找到dismissWithClickedButtonIndex:
委托方法并删除整个else if (buttonIndex == sharers.count)
块。
您可以为您希望使用的每个 Sharekit 服务导入头文件。例如,如果您有一个带有 UILabel 的页面,其中包含一串文本,您可以在实现文件的顶部导入您希望使用的服务。
#import "SHKTwitter.h"
#import "SHKFacebook.h"
#import "SHKMail.h"
然后,您可以通过任何您希望的操作将其设置为通过这些服务共享,例如,点击 Facebook、Twitter 或邮件按钮?或者,您可以手动输入您自己的 UIActionSheet,其中包含 Twitter、Facebook 和 Mail 的三个项目,然后根据请求调用特定的 Sharekit 服务。
例如,如果您想发布 URL;
#import "SHKTwitter.h" //include the service's header at the top of your class
...
// Create the item to share (in this example, a url)
NSURL *url = [NSURL URLWithString:@"http://iPhoneHelpr.com"];
SHKItem *item = [SHKItem URL:url title:@"Check out my site!"];
// Share the item
[SHKTwitter shareItem:item]; // Specify the specific service you want to share with
这是一个简单的解释,但它可以应用于共享图像、文档、文本字符串等。
当您创建自己的配置文件时,请覆盖此方法:
- (NSString*)sharersPlistName
{
return @"MySHKSharers.plist"; // original value is "SHKSharer.plist"
}
将 Classes/ShareKit/Core 下 ShareKit 项目中的 SHKSharer.plist 复制到您的项目位置。
从文件中删除不需要的操作和服务,您就完成了。
从“DefaultSHKConfigurator.h”继承 DefaultSHKConfigurator 并实现以下方法:
- (NSArray*)defaultFavoriteURLSharers {
return [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook", @"SHKPocket", nil];
}
- (NSArray*)defaultFavoriteImageSharers {
return [NSArray arrayWithObjects:@"SHKMail",@"SHKFacebook", @"SHKCopy", nil];
}
- (NSArray*)defaultFavoriteTextSharers {
return [NSArray arrayWithObjects:@"SHKMail",@"SHKTwitter",@"SHKFacebook", nil];
}
在您的 stdAppDelegate 中:
//configure sharekit:
DefaultSHKConfigurator *configurator = [[MySHKConfigurator alloc] init];
[SHKConfiguration sharedInstanceWithConfigurator:configurator];
在我看来,上述解决方案是错误的并且不可维护,因为每次 ShareKit 库有更新时您都必须应用该更改(至少现在,我不知道它在以前版本的 ShareKit 中的情况如何)。
如果您阅读SHK.m,您会看到它首先尝试从首选项中获取您的共享者(如果有的话),否则它将转到 SHKConfigurator 并调用defaultFavoriteURLSharers。
如果您将DefaultSHKConfigurator子类化(您可能会这样做),您可以覆盖defaultFavoriteURLSharers方法(或 ImageSharers,或 TextSharers 等),您可以在那里定义您最喜欢的共享者。
在@interface CLQShareKitConfigurator 中: DefaultSHKConfigurator
- (NSArray*)defaultFavoriteURLSharers
{
return [NSArray arrayWithObjects:@"SHKTwitter",@"SHKFacebook", nil];
}
要删除更多按钮,您可以在 SHKConfigurator 中添加此方法
-(NSNumber*)showActionSheetMoreButton {
return [NSNumber numberWithBool:false];
}