UIActivityViewController настраивает текст на основе выбранной активности
Я хочу настроить текст для той же информации, но когда я делюсь им на Facebook, я не хочу использовать твиттер-хэш-теги или схему @username...
Как я могу разнообразить текст для совместного использования, на основе которого будет использоваться служба совместного доступа?
Конечно, я использую UIActivityViewController:
UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil];
Ответы
Ответ 1
Вместо того, чтобы передавать текстовые строки в вызов initWithActivityItems
, передайте свой собственный подкласс класса UIActivityItemProvider
и когда вы реализуете метод itemForActivityType
, он будет предоставлять службу обмена как параметр "activityType".
Затем вы можете вернуть настроенный контент из этого метода.
Ответ 2
Я принял этот ответ и сделал для него простой класс. Сообщение по умолчанию будет отображаться путем обмена точками, отличными от Twitter, а слова Twitter в массиве hashWords появятся с хэшами, если они присутствуют в сообщении по умолчанию. Я думал, что поделюсь им всем, кому это нужно. Спасибо Кристофер!
Использование:
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