2016-10-13 5 views
2

キーボード拡張機能から開こうとしています。私はカスタムキーボードを持っているし、設定からそのキーボードを追加しています。私のカスタムキーボードには、「もっと見る」というボタンが1つあり、このボタンをクリックすると自分のアプリを開きたいと思う。私のアプリケーションをswift 3.0のキーボード拡張から開きます

だから私は、次のコードしようとしている:私たちは迅速Selector("method_name:")に知っているようにそれが正常に働いている

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(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) 
} 

は私が可能な方法、ない運が他人をも試してみました。誰かがする方法を知っていれば、私に知らせてください。

私は、このリンク、フリオ・バイロンの答え呼ば:コードに続いて

openURL not work in Action Extension

+0

は解決策を見つけました? – Danny182

+0

まだ.... @ Danny182 – VRAwesome

+0

いくつかのアプリはそれを行います。非常に奇妙な@VRA素晴らしい – Danny182

答えて

2

は、任意のコンパイラの警告なしにの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) 
} 
関連する問題