Как сделать исключение для совместного использования в социальных сетях для Twitter/листа действий?

Я использую следующий код для вызова общего доступа к листу действий в своем приложении:

- (IBAction)sendPost:(id)sender
{
    NSArray *activityItems = nil;
    UIImage *appIcon = [UIImage imageNamed:@"appIcon.png"];
    NSString *postText = [[NSString alloc] initWithFormat:@"LETS ASSUME THIS STRING IS LONGER THAN 140 CHARACTERS THAT TWITTER PROHIBITS BUT CAN STILL BE SHARED VIA FACEBOOK, EMAIL, TEXT"];
    activityItems = @[postText,appIcon];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

Проблема в следующем: postText длиннее 140 символов, поэтому поделиться через твиттер будет невозможно, количество символов будет -x (красное количество символов, которое у вас закончилось, чтобы поделиться через твиттер) , мой вопрос заключается в следующем: Как я могу сделать исключение, чтобы при выборе твиттера для совместного использования использовалось другое сообщение с указанием shortPostText?

И как только действие sendPost отправлено, я не вижу способа явно установить строку для твиттера, когда вы здесь:

введите здесь описание изображения

Редактировать: Я не понимаю, почему кто-то может проголосовать против этого вопроса, я не спрашиваю, как составить оператор if/else или как программировать. Это настоящий вопрос, на который нужен настоящий ответ.

ОБНОВЛЕНИЕ: мне нужно обойти это, потому что это то, что я получаю, когда пользователь пытается поделиться через твиттер в моем приложении:

введите здесь описание изображения

Индикатор красного / отрицательного символа и неактивная кнопка публикации, поэтому, если количество символов не уменьшится до 0 или меньше, сообщение не будет отправлено в твиттер.


person vzm    schedule 08.11.2013    source источник
comment
Что происходит, когда вы отправляете в Twitter текст размером более 140 символов?   -  person Loïc Faure-Lacroix    schedule 08.11.2013
comment
@LoïcFaure-Lacroix Я обновил пост, добавив ответ на ваш вопрос.   -  person vzm    schedule 08.11.2013


Ответы (1)


TL;DR Используйте UIActivityItemSource для специальных case полезная нагрузка в зависимости от выбора пользователя.

Попробуйте это вместо этого:

- (IBAction)sendPost:(id)sender
{
    UIImage *appIcon = [UIImage imageNamed:@"appIcon.png"];
    NSString *postText = [[NSString alloc] initWithFormat:@"LETS ASSUME THIS STRING IS LONGER THAN 140 CHARACTERS THAT TWITTER PROHIBITS BUT CAN STILL BE SHARED VIA FACEBOOK, EMAIL, TEXT"];
    TextItemSource *itemSource = [[TextItemSource alloc] initWithString:postText previewImage:appIcon];
    UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:@[itemSource] applicationActivities:nil];
    [self presentViewController:activityController animated:YES completion:nil];
}

// ------- TextItemSource.h
@interface TextItemSource : NSObject <UIActivityItemSource>
- (id)initWithString:(NSString *)string previewImage:(UIImage *)previewImage;
@end

// ------- TextItemSource.m
@implementation TextItemSource
{
    NSString *_string;
    UIImage *_previewImage;
}

- (id)initWithString:(NSString *)string previewImage:(UIImage *)previewImage
{
    self = [super init];
    if (self) {
        _string = [string copy];
        _previewImage = previewImage;
    }
    return self;
}

- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
    return _string;
}

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
    NSString *string = _string;
    if ([activityType isEqual:UIActivityTypePostToTwitter]) {
#pragma mark TODO: do smarter thing :)
        string = [_subject substringToIndex:140];
    }
    return string;
}

- (UIImage *)activityViewController:(UIActivityViewController *)activityViewController thumbnailImageForActivityType:(NSString *)activityType suggestedSize:(CGSize)size
{
    // might want to scale image to fit suggestedSize
    return _previewImage;
}
@end
person ccjensen    schedule 08.11.2013