同じ情報のテキストをカスタマイズしたいのですが、Facebookで共有しているときは、Twitterのハッシュタグや@usernameスキームを使用したくありません...
使用する共有サービスに基づいて、共有するテキストを多様化するにはどうすればよいですか?
もちろん、私はUIActivityViewControllerを使用しています。
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil];
テキスト文字列をinitWithActivityItems
呼び出しに渡す代わりに、 UIActivityItemProvider
クラスの独自のサブクラスを渡し、itemForActivityType
を実装するときにメソッドは、「activityType」パラメータとして共有サービスを提供します。
その後、このメソッドからカスタマイズされたコンテンツを返すことができます。
私はこの答えを受け取り、そのための簡単なクラスを作成しました。デフォルトのメッセージは、Twitter以外のアウトレットを共有することで表示され、hashWords配列内のTwitterの単語は、デフォルトのメッセージに存在する場合はハッシュ付きで表示されます。私はそれを必要とする他の人のためにそれを共有すると思いました。クリストファーに感謝します!
使用法:
TwitterHashActivityItemProvider *twit = [[TwitterHashActivityItemProvider alloc] initWithDefaultText:@"I really like stackoverflow and code"
hashWords:@[@"stackoverflow", @"code"]];
NSArray *items = @[twit];
UIActivityViewController *act = [[UIActivityViewController alloc] initWithActivityItems:items applicationActivities:nil];
ヘッダ:
@interface TwitterHashActivityItemProvider : UIActivityItemProvider
- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems;
@property (nonatomic,strong) NSArray *hashItems;
@end
実装:
#import "TwitterHashActivityItemProvider.h"
@implementation TwitterHashActivityItemProvider
- (id)initWithDefaultText:(NSString*)text hashWords:(NSArray*)hashItems;
{
self = [super initWithPlaceholderItem:text];
if ( self )
{
self.hashItems = hashItems;
}
return self;
}
- (id)item
{
if ( [self.placeholderItem isKindOfClass:[NSString class]] )
{
NSString *outputString = [self.placeholderItem copy];
// Twitter gets some hash tags!
if ( self.activityType == UIActivityTypePostToTwitter )
{
// go through each potential hash item and augment the main string
for ( NSString *hashItem in self.hashItems)
{
NSString *hashed = [@"#" stringByAppendingString:hashItem];
outputString = [outputString stringByReplacingOccurrencesOfString:hashItem withString:hashed];
}
}
return outputString;
}
// else we didn't actually provide a string...oops...just return the placeholder
return self.placeholderItem;
}
@end
UIActivityItemProviderサブクラスのSwift実装例。コピーオプションはパスワードのみを使用し、他のアクティビティタイプは完全な共有テキストを使用します。さまざまなユースケースに合わせて簡単にカスタマイズできる必要があります。彼らの答えはCristopher&NickNackの功績によるものです。
class PasswordShareItemsProvider: UIActivityItemProvider {
private let password: String
private var shareText: String {
return "This is my password: " + password
}
init(password: String) {
self.password = password
// the type of the placeholder item is used to
// display correct activity types by UIActivityControler
super.init(placeholderItem: password)
}
override var item: Any {
get {
guard let activityType = activityType else {
return shareText
}
// return desired item depending on activityType
switch activityType {
case .copyToPasteboard: return password
default: return shareText
}
}
}
}
使用法:
let itemProvider = PasswordShareItemsProvider(password: password)
let activityViewController = UIActivityViewController(activityItems: [itemProvider], applicationActivities: nil)