Исходный текст и paperclipped-URL для действия в UIActivityViewController и UIActivityItemSource?

Наконец, это было сделано через Apple (довольно мрачную) документацию по новому классу UIActivityViewController и UIActivityItemSource, и я пытаюсь отправить разные наборы данных для разных действий, вызванных из вида активности. Чтобы упростить вещи, я смотрю на две вещи.

  • Аккаунт Facebook, который должен сказать "Проверьте это!". и также прикрепите URL-адрес к сообщению (с этой симпатичной маленькой скрепкой).
  • Аккаунт в Twitter, который должен сказать "Проверьте это, С#hashtag!" а также прикрепить тот же URL (с тем же скрепкой).

Вот код, который я сейчас применил.

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType {
    if ([activityType isEqualToString:UIActivityTypePostToFacebook]) {
        return @"Check this out!";
    } else if ([activityType isEqualToString:UIActivityTypePostToTwitter]) {
        return @"Check this out, with #hashtag!";
    }

    return @"";
}

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

И затем, когда я настроил этот контроллер представления активности (он в том же классе), это то, что я делаю.

UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];

Моя дилемма , как прикрепить этот объект NSURL.. Это относительно легко при вызове модальности публикации класса iOS 6 SL; вы просто вызываете отдельные методы для присоединения URL-адреса или изображения. Как мне это сделать здесь?

Я хочу заметить, что вместо того, чтобы возвращать NSString объекты из -activityViewController:itemForActivityType, если я возвращаю только объекты NSURL, они отображаются с этой скрепкой, без текстового текста в сообщении. Если я возвращу массив из этих двух элементов, ничего не появится вообще.

Ответ 1

Очевидно, это было так же просто: передать в массив первый аргумент вызова UIActivityViewController init, причем каждый элемент массива обрабатывает другой тип данных, который попадет на экран компоновки. self обрабатывает текст, а второй объект (NSURL) прикрепляет URL-адрес.

NSArray *items = @[self, [NSURL URLWithString:@"http://this-is-a-url.com"]];
UIActivityViewController *activityView = [[UIActivityViewController alloc]  initWithActivityItems:items applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];

На самом деле хотелось бы, чтобы на этом было больше, но вот оно.