Как выполнить действие после вызова UIActivityViewController, а затем закрыть

Я не могу понять, как выполнять действия после UIActivityViewController называется. Например, когда я сохраняю изображение со следующим кодом:

let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let activity = UIActivityViewController(activityItems: [image], applicationActivities: nil)
presentViewController(activity, animated: true, completion: nil)

пользователь получает новое окно с возможностью сохранения изображения где-то. После того, как образ был успешно сохранен, я хочу, чтобы выполнить какое-либо действие (например, прыжок в корень-представление-контроллер). Но я не могу понять, как отследить это UIActivityViewController была закрыта. Если я пишу код после этого блока, ничего не происходит, как я понимаю, потому что этот код реализовано в деятельности ВК, а не в оригинальном ВК.

Я так и думал viewWillDisappear поможет мне, но он отслеживает оригинальный VC, откуда я назвал activity VC, и я не могу понять, как я могу отслеживать активность VC. В то же время, даже если бы у меня была возможность отслеживать это событие, все равно остается вопрос: чем я могу отличаться от успешного сохранения от отмены?

2 ответов


можно использовать completionHadler в данном случае:

activity.completionWithItemsHandler = { activity, success, items, error in
    print("activity: \(activity), success: \(success), items: \(items), error: \(error)")
}

вы должны использовать протоколы вызова метода, когда UIActivityViewController закрыт

protocol ActivityViewControllerDelegate {
    activityViewControllerClosed()
}

class YourOriginalViewController: UIViewController, ActivityViewControllerDelegate {
    func yourMethodToOpenTheActivityViewController() {
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        let activity = UIActivityViewController(activityItems: [image], applicationActivities: nil)

        activity.delegate = self  //ADD SELF AS THE DELEGATE

        presentViewController(activity, animated: true, completion: nil)
    }

    func activityViewControllerClosed() {
        //Your UIActivityViewController has been closed, you can do something here
    }
}

class UIActivityViewController: UIViewController {
    var delegate: ActivityViewControllerDelegate? //ADD A PROPERTY FOR THE DELEGATE

    func yourMethodToCloseTheActivity() {
        delegate.activityViewControllerClosed() //ADD THIS LINE TO NOTIFY THE DELEGATE
    }
}

вы можете найти более подробную информацию здесь https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html