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

Различные данные для обмена поставщиками в UIActivityViewController

Я пытаюсь использовать UIActivityViewController с одним длинным NSString в качестве данных. Если я помещаю строку > 140 символов, твист-лист в ней не отображает строку. И если я усекаю строку перед передачей ее контроллеру, все UIActivities имеют усеченную строку. Я не хочу, чтобы Facebook или Message были усечены.

Есть ли способ передать разные строки различным UIActivities?

Спасибо!

(например, приложение Marco Arment The Magazine делает это с помощью усеченной строки, за которой следует @TheMagazineApp в UIActivityPostToTwitter, и другие вещи в других UIActivities.)

4b9b3361

Ответ 1

Я думаю, это то, что вы ищете

Вы должны иметь возможность предоставлять разные данные для каждого вида деятельности.

Ответ 2

Надеюсь, это поможет кому-то. Это довольно просто, если вы подклассом UIActivityItemProvider:

@interface MyActivityItemProvider : UIActivityItemProvider
@end

@implementation MyActivityItemProvider

- (id)item
{
    // Return nil, if you don't want this provider to apply 
    // to a particular activity type (say, if you provide 
    // print data as a separate item for UIActivityViewController).
    if ([self.activityType isEqualToString:UIActivityTypePrint]) 
        return nil;

    // The data you passed while initialising your provider 
    // is in placeholderItem now.
    if ([self.activityType isEqualToString:UIActivityTypeMail] ||
        [self.activityType isEqualToString:UIActivityTypeCopyToPasteboard])
    {
        return self.placeholderItem;
    }

    // Return something else for other activities. Obviously, 
    // you can as well reuse the data in placeholderItem here.
    return @"Something else";
}

@end

Затем передайте свой экземпляр массиву элементов активности в UIActivityViewController:

MyActivityItemProvider *activityItem = 
    [[MyActivityItemProvider alloc] initWithPlaceholderItem:@"Your data"];
NSArray *sharingItems = [NSArray arrayWithObjects:
    activityItem, _myUITextView.viewPrintFormatter, nil];

UIActivityViewController *activityController = 
    [[UIActivityViewController alloc] 
        initWithActivityItems:sharingItems applicationActivities:nil];