Как выполнить действие после вызова 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