Accessing extensionContext from a presented view controller
If you're going to use more than a single view controller in your extension storyboard, you'll have to pass a reference to the extensionContext
of the original view controller to the view controller that will ultimately be responsible for completing the extension's request. In the initial view controller:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let destination = segue.destinationViewController as! FinalViewController
destination.originalExtensionContext = self.extensionContext
}
And in your final view controller:
@IBAction func dismissController(sender: UIButton!) {
dismissViewControllerAnimated(true) { () -> Void in
self.originalExtensionContext.completeRequestReturningItems(self.originalExtensionContext.inputItems, completionHandler: nil)
}
Note that you have to create a uniquely named property for the original extension context, since extensionContext
already exists as a property name on the superclass UIViewController
. You can't pass the existing extensionContext
to the UIViewController's property extensionContext
as it is a read-only attribute.