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

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

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

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

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

person Ertai    schedule 28.09.2012    source источник


Ответы (3)



Я взял этот ответ и сделал для него простой класс. Сообщение по умолчанию будет отображаться в других источниках, кроме Твиттера, а для Твиттера слова в массиве 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
person NickNack    schedule 12.11.2012
comment
Должен ли self.activityType == UIActivityTypePostToTwitter быть [self.activityType isEqualToString:UIActivityTypePostToTwitter] или можно безопасно использовать указатели? - person Tin Can; 01.08.2013

Пример быстрой реализации подкласса UIActivityItemProvider. Опция копирования будет использовать только пароль, другие типы действий будут использовать полный текст общего доступа. Должно быть легко настроить для различных случаев использования. Спасибо Кристоферу и НикНаку за их ответы.

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)
person pkorosec    schedule 12.02.2018