2012-10-07 17 views
8

En la aplicación Fotos en el iPhone, cuando selecciona la opción Compartir correo, la foto se anima en el controlador de vista modal que se desliza hacia arriba. ¿Cómo es posible modificar el comportamiento de las UIActivities integradas? Por ejemplo, me gustaría poder establecer el campo de asunto del compositor de correo.Ignorar el comportamiento predeterminado de UIActivityViewController

Respuesta

15

Desafortunadamente, la personalización del campo de asunto del UIActivityViewController compositor de correo no funciona todavía.

Hay un error documentado e informado con respecto a tratar de adaptar este discutido aquí:

iphone - How do I set recipients for UIActivityViewController in iOS 6?


Si esto se trabaja, según la documentación, que sería capaz de personalizar estos compositor electrónico campos:

UIActivityTypeMail: El objeto publica el contenido proporcionado en un nuevo mensaje de correo electrónico. Cuando utiliza este servicio, puede proporcionar objetos NSString y UIImage y objetos NSURL apuntando a archivos locales como datos para los elementos de actividad. También puede especificar objetos NSURL cuyo contenido utiliza el esquema mailto .

Así, utilizando el esquema mailto, cuando se está trabajando, usted debería ser capaz de personalizar los campos de este tipo:

NSString *text = @"My mail text"; 
    NSURL *recipients = [NSURL URLWithString:@"mailto:[email protected]?subject=Here-is-a-Subject"]; 
    NSArray *activityItems = @[text, recipients]; 

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

Si su búsqueda de otras formas de personalizar la UIActivityViewController hay un excelente ejemplo de proyecto aquí:

https://github.com/russj/ios6ShareDemo

+0

Gracias s para el enlace. Para Mail, o cualquier otra cosa que no se comporte como usted desea, creo que es posible crear un UIActivitySource personalizado que haga lo que desee. En este caso, excluya UIActivityMail y cree una actividad personalizada que llene el campo del asunto, etc. – n13

4

Esta es la forma en que lo hice y se está trabajando para mí en IOS 7.

Crear una clase que cumpla con el protocolo UIActivityItemSource:

@interface CustomActivityItem : NSObject <UIActivityItemSource> 
@end 

En la implementación anular los métodos pertinentes:

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

- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"Subject" 
    } 

    return nil; 
} 

- (id)activityViewController:(UIActivityViewController *)activityViewController itemForActivityType:(NSString *)activityType 
{ 
    if ([activityType isEqualToString:UIActivityTypeMail]) 
    { 
     return @"body"; 
    } 

    return nil; 
} 

luego presentar el controlador de vista actividad:

CustomActivityItem* activityItem = [[CustomActivityItem alloc] init]; 
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[activityItem] 
                         applicationActivities:nil]; 

[self presentViewController:activityViewController animated:YES completion:nil]; 
+0

No parece que este enfoque funcione para iOS9. Obtendrá un error 'init' se ha marcado explícitamente como no disponible aquí. – DenVog

+0

Todavía estoy usando este enfoque en iOS 9, compilando con Xcode Version 7.0.1 (7A1001), y funciona bien. ¿Cuál es el error exacto que está recibiendo? – pedrobolanos

+0

¿Esto agrega un destinatario? – mKane

Cuestiones relacionadas