ios – 从呈现的视图控制器访问extensionContext

前端之家收集整理的这篇文章主要介绍了ios – 从呈现的视图控制器访问extensionContext前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经尝试为共享扩展创建自定义视图控制器.

当我在MainInterface.storyboard上设置的初始视图控制器上呈现另一个视图控制器时,会出现令人困惑的情况.这个呈现的视图控制器嵌入在导航控制器中(它是它的根视图控制器).

我对presentViewController进行了检查

(lldb) po [self presentingViewController]

<_UIViewServiceViewControllerOperator: 0x7a978000>

(lldb) po [[self presentingViewController] extensionContext]

nil

因此,此时扩展上下文为零.我可以通过将它从presentsViewController传递给presentViewController来访问extensionContext.

但是,我发现这种行为有点奇怪.应用程序扩展是否仅设计为从一级视图控制器层次结构访问?

解决方法

如果您要在扩展故事板中使用多个视图控制器,则必须将对原始视图控制器的extensionContext的引用传递给最终负责完成扩展请求的视图控制器.在初始视图控制器中:
override func prepareForSegue(segue: UIStoryboardSegue,sender: AnyObject?) {
    let destination = segue.destinationViewController as! FinalViewController
    destination.originalExtensionContext = self.extensionContext
}

在你的最终视图控制器中:

@IBAction func dismissController(sender: UIButton!) {
    dismissViewControllerAnimated(true) { () -> Void in
        self.originalExtensionContext.completeRequestReturningItems(self.originalExtensionContext.inputItems,completionHandler: nil)
}

请注意,您必须为原始扩展上下文创建唯一命名的属性,因为extensionContext已作为超类UIViewController上的属性名存在.您不能将现有的extensionContext传递给UIViewController的属性extensionContext,因为它是一个只读属性.

猜你在找的iOS相关文章