Finalmente lo he estado haciendo a través de la documentación (bastante triste) de Apple sobre la nueva clase UIActivityViewController
y el protocolo UIActivityItemSource
, y estoy tratando de enviar diferentes conjuntos de datos a diferentes acciones llamadas desde la vista de actividad. Para simplificar las cosas, estoy viendo dos cosas.Texto inicial y paperclipped-URL para la acción en UIActivityViewController & UIActivityItemSource?
- Acción de publicación en Facebook, que debería decir "¡Mira esto!" y también adjunte una URL a la publicación (con ese lindo clip pequeño).
- Una acción de publicación de Twitter, que debería decir "¡Mira esto, con #hashtag!" y también adjunte esa misma URL (con el mismo clip).
Aquí está el código que he implementado en este momento.
- (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 @"";
}
Y luego cuando configuro este controlador de vista de actividad (está en la misma clase), esto es lo que hago.
UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[self] applicationActivities:nil];
[self presentViewController:activityView animated:YES completion:nil];
Mi dilema es cómo colocar que NSURL
objeto. Es relativamente fácil cuando se llama a los modos modals de iOS 6 SL-class; simplemente llame a los métodos individuales para adjuntar una URL o una imagen. ¿Cómo voy a hacer esto aquí?
me habrá dado cuenta de que en vez de volver NSString
objetos de -activityViewController:itemForActivityType
, si vuelvo a sólo NSURL
objetos, que aparecen con un clip que, sin el cuerpo del texto en el puesto. Si devuelvo una matriz de esos dos elementos, no aparece nada.
Tenga en cuenta que un solo UIActivityItemSource solo puede devolver un marcador de posición para un único dato (no devolver NSArrays para 'activityViewControllerPlaceHolderItem:'. Para obtener más información, consulte esta pregunta: http://stackoverflow.com/questions/13029340/uiactivityitemsource- protocole-set-complex-object – Doug
Gracias por el puntero a esa otra pregunta. He olvidado más o menos 'UIActivityViewController' por ahora (he perdido demasiadas horas haciendo que haga lo que quiero), ya que es tan inflexible, pero esa subclase mencionada en su enlace parece un paso definitivo en la dirección correcta. –
He estado luchando con este mismo problema. Parece extraño que no definieran las constantes para los tipos de datos posibles, de modo que pudiéramos marcar contra esos. UIActivityViewController es una gran idea, pero la implementación es un poco rara en este momento. – poetmountain