从swift 3.0的我的键盘扩展中打开我的应用程序

问题描述:

我试图从我的键盘扩展中打开。我有自定义键盘,我从设置中添加该键盘。在我的自定义键盘上有一个按钮“显示更多”,并且我想在此按钮上单击打开我的应用程序。从swift 3.0的我的键盘扩展中打开我的应用程序

所以我曾尝试下面的代码:

let context = NSExtensionContext() 
context.open(url! as URL, completionHandler: nil) 

var responder = self as UIResponder? 

while (responder != nil) { 

     if responder?.responds(to: Selector("openURL:")) == true { 

      responder?.perform(Selector("openURL:"), with: url) 
     } 
     responder = responder!.next 
} 

它成功而努力,但我们知道在迅速Selector("method_name:")已被弃用,使用#selector(classname.methodname(_:))代替它给警告。我想解决这个警告。所以,我曾尝试为Xcode的自动提示:

if responder?.responds(to: #selector(UIApplication.openURL(_:))) == true { 

     responder?.perform(#selector(UIApplication.openURL(_:)), with: url) 
} 

也试过:

if responder?.responds(to: #selector(NSExtensionContext.open(_:))) == true { 

     responder?.perform(#selector(NSExtensionContext.open(_:)), with: url) 
} 

我也曾尝试其他可能的方式,但没有运气。如果有人知道该怎么做,请告诉我。

我提到这个链接,胡里奥Bailon的回答是:

openURL not work in Action Extension

+0

找到了解决办法? – Danny182

+0

尚未.... @ Danny182 – VRAwesome

+0

有些应用程序可以。很奇怪@VRAwesome – Danny182

下面的代码工作的的Xcode 8.3.3,iOS10,Swift3没有任何编译器警告:

func openUrl(url: URL?) { 
    let selector = sel_registerName("openURL:") 
    var responder = self as UIResponder? 
    while let r = responder, !r.responds(to: selector) { 
     responder = r.next 
    } 
    _ = responder?.perform(selector, with: url) 
}