Подтвердить что ты не робот

UIActivityViewController настраивает текст на основе выбранной активности

Я хочу настроить текст для той же информации, но когда я делюсь им на Facebook, я не хочу использовать твиттер-хэш-теги или схему @username...

Как я могу разнообразить текст для совместного использования, на основе которого будет использоваться служба совместного доступа?

Конечно, я использую UIActivityViewController:

UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[shareText, shareURL] applicationActivities:nil];
4b9b3361

Ответ 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