La respuesta por JotWee me ayudó.
No hay necesidad de subclasificar, los métodos de protocolo UIActivityItemSource
se pueden implementar en el controlador de vista donde se implementa el botón Compartir.
muy importante añadir self
en elementos de actividad matriz, así (como se sugiere JotWee):
NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil];
Aquí es mi implementación final:
ViewController.h
@interface ViewController : UIViewController <UIActivityItemSource>
ViewController .m
- (void)shareBarButtonItemClick:(UIBarButtonItem *)sender
{
NSURL *url = [NSURL URLWithString:@"http://example.com"];
NSURL *imageUrl = [NSURL URLWithString:@"http://example.com/images/1.jpg"];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
NSArray *activityItems = [NSArray arrayWithObjects:self, url, image, nil];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
}
- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType
{
return @"Summary Text";
}
- (id)activityViewControllerPlaceholderItem:(UIActivityViewController *)activityViewController
{
return @"";
}
- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType
{
return @"Subject";
}
Ya lo estoy haciendo y, sin embargo, no se están llamando a los métodos. Estoy pasando un objeto 'UIActivityItemProvider' (y sí, implementé el protocolo' UIActivityItemSource' en mi controlador de vista). – Mahouk
no debe implementar el protocolo 'UIActivityItemSource' en su controlador de vista. 'UIActivityItemProvider' implementa los métodos para este protocolo. – Niels
¡Funciona ahora que implementé los métodos en mi subclase 'UIActivityItemProvider'! ¡Muchas gracias! He estado yendo por horas. – Mahouk