El manejador de finalización de UIATTHIVEVIEWCONROLLER sigue llama acción si presiona el usuario cancelar

StackOverflow https://stackoverflow.com//questions/22083922

Pregunta

En mi UIACTTHIVIEVIEWCONTROLLER, utilizo el controlador de finalización para ejecutar una notificación "Compartida con éxito".Funciona, pero mi único problema es, todavía muestra la notificación si el usuario presiona Cancelar.

Aquí está mi código de controlador de finalización,

[controller setCompletionHandler:^(NSString *activityType, BOOL completed) {


    CWStatusBarNotification *notification = [CWStatusBarNotification new];
    [notification displayNotificationWithMessage:@"✓ Successfully Shared Centre!"
                                          forDuration:3.0f];

    notification.notificationLabelBackgroundColor = [UIColor colorWithRed:38.0f/255.0f green:81.0f/255.0f blue:123.0f/255.0f alpha:1.0f];
    notification.notificationLabelTextColor = [UIColor whiteColor];



}];

¡Gracias por la ayuda!

¿Fue útil?

Solución

Para eso es el argumento de completed para:

[controller setCompletionHandler:^(NSString *activityType, BOOL completed) {
    if (!completed) return;

    CWStatusBarNotification *notification = [CWStatusBarNotification new];
    [notification displayNotificationWithMessage:@"✓ Successfully Shared Centre!"
                                     forDuration:3.0f];

    notification.notificationLabelBackgroundColor = [UIColor colorWithRed:38.0f/255.0f green:81.0f/255.0f blue:123.0f/255.0f alpha:1.0f];
    notification.notificationLabelTextColor = [UIColor whiteColor];
}];

Otros consejos

NOTA: La propiedad FinalionHandler está en desuso en IOS8, por lo que ya no es posible conocer el resultado de una acción de acciones. https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622010-completionhandler

Actualización: Como dijo Adruzh, en iOS8 hay una nueva Finalización que Apple olvidó mencionar en la documentación:

[activityController setCompletionWithItemsHandler:
    ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
}];

https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/ 1622022-completionwithitemshandler

Para SWIFT, esto es lo que funcionó para nosotros:

    ...

    // Configure UIActivityViewController
    let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
    activityViewController.excludedActivityTypes = [UIActivityTypeAirDrop,
        UIActivityTypeAddToReadingList,
        UIActivityTypeAssignToContact,
        UIActivityTypePrint,
        UIActivityTypeCopyToPasteboard]

    // Show UIActivityViewController
    presentViewController(activityViewController, animated: true, completion: nil)

    // Define completion handler
    activityViewController.completionWithItemsHandler = doneSharingHandler

    ...

func doneSharingHandler(activityType: String!, completed: Bool, returnedItems: [AnyObject]!, error: NSError!) {
    // Return if cancelled
    if (!completed) {
        return
    }

    // If here, log which activity occurred
    println("Shared video activity: \(activityType)")
}

Para las velocidades de las rapas, aquí le indicamos cómo codificaría esto en SWIFT junto con una detección de servicios de acciones:

activityViewController.completionHandler = {(activityType, completed:Bool) in
    if !completed {
        //cancelled
        return
    }

    //shared successfully

    //below is how you would detect for different sharing services
    var activity:String = "other"
    if activityType == UIActivityTypePostToTwitter {
        activity = "twitter"
    }
    if activityType == UIActivityTypeMail {
        activity = "mail"
    }
    //more code here if you like
}

El parámetro GENACODICETAGODEDOTE será completed, se cancela el usuario.

[controller setCompletionHandler:^(NSString *activityType, BOOL completed) {
    if (completed) {
        CWStatusBarNotification *notification = [CWStatusBarNotification new];
        [notification displayNotificationWithMessage:@"✓ Successfully Shared Centre!"
                                          forDuration:3.0f];

        notification.notificationLabelBackgroundColor = [UIColor colorWithRed:38.0f/255.0f green:81.0f/255.0f blue:123.0f/255.0f alpha:1.0f];
        notification.notificationLabelTextColor = [UIColor whiteColor];
    }
}];

swift 2.0, iOS 8.0> , debe usar el manejador de finalización como este:

self.presentViewController(activityVC, animated: true, completion: nil)

activityVC.completionWithItemsHandler = {(activityType, completed:Bool, returnedItems:[AnyObject]?, error: NSError?) in
     //do some action
}

Vea mi respuesta aquí: https://stackoverflow.com/a/34581940/1109892

SWIFT 3

   func completionHandler(activityType: UIActivityType?, shared: Bool, items: [Any]?, error: Error?) {
        if (shared) {
            print("Cool user shared some stuff")
        }
        else {
            print("Bad user canceled sharing :(")
        }
    }

    activityController.completionWithItemsHandler = completionHandler

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top