アプリにShareKitを実装しました。デフォルトの動作方法で問題ありませんが、ユーザーが選択できるサービスを制御したいと思います。具体的には、デフォルトで組み込まれているすべてのサービスを扱いたくはなく、Facebook、Twitter、Mailだけを使用します。
ShareKitファイルのどこでこれらの設定を行いますか(APIなどを処理したくないこれらの無視されたサービスをすべて削除します)?
SHK.m
ShareKit フレームワークで編集する必要があります。favoriteSharersForType:
メソッドを次のように変更します。
favoriteSharers = [NSArray arrayWithObjects:@"SHKFacebook", @"SHKTwitter", nil];
return favoriteSharers;
必要に応じて、この配列からサービスを追加/削除できます。
編集
[その他...] ボタンを削除するには、actionSheetForType
メソッドを見つけてSHKActionSheet.m
削除します。
[as addButtonWithTitle:SHKLocalizedString(@"More...")];
これが完了したら、インデックスを修正する必要があります。デリゲート メソッドを見つけて、ブロックdismissWithClickedButtonIndex:
全体を削除します。else if (buttonIndex == sharers.count)
独自の構成ファイルを作成するときは、このメソッドをオーバーライドします。
- (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 サービスのヘッダー ファイルをインポートできます。たとえば、テキストの文字列を含む UILabel を含むページがある場合、使用するサービスを実装ファイルの先頭にインポートできます。
#import "SHKTwitter.h"
#import "SHKFacebook.h"
#import "SHKMail.h"
次に、Facebook、Twitter、またはメールボタンをタップするなど、任意のアクションを介してこれらのサービスを介して共有するように設定できますか? または、Twitter、Facebook、およびメールの 3 つの項目を含む独自の UIActionSheet を手動で入力して、要求に応じて特定の 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
これは簡単な説明ですが、画像、ドキュメント、文字列などの共有に適用できます。
私の意見では、上記の解決策は間違っており、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];
}