Pra*_*y C 1 uiviewcontroller uiresponder ios swift ios-extensions
我希望能够在我的应用程序中打开 Safari 链接。为此,我创建了一个操作扩展。我尝试了以下代码的多种变体进行测试,但没有一个变体打开我的主应用程序:
第一次尝试:
func openContainerApp() {
var responder: UIResponder? = self as UIResponder
let selector = #selector(openURL(_:))
while responder != nil {
if responder!.responds(to: selector) && responder != self {
responder!.perform(selector, with: URL(string: "awesome://item?id=20036169")!)
}
responder = responder?.next
}
self.extensionContext!.completeRequest(returningItems: [], completionHandler: nil)
}
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
func redirectToHostApp() {
let url = URL(string: "awesome://item?id=20036169")
let selectorOpenURL = sel_registerName("openURL:")
let context = NSExtensionContext()
context.open(url! as URL, completionHandler: nil)
var responder = self as UIResponder?
while (responder != nil){
if responder?.responds(to: selectorOpenURL) == true{
responder?.perform(selectorOpenURL, with: url)
}
responder = responder!.next
}
}
Run Code Online (Sandbox Code Playgroud)
我在我的主应用程序中添加了“很棒的”URL 方案。我还为应用程序委托中所有可能的 openURL 委托方法返回“true”:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return true
}
func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return true
}
Run Code Online (Sandbox Code Playgroud)
我已将NSExtensionActivationSupportsWebURLWithMaxCount我的操作扩展设置为 1。
尽管如此,我的主应用程序仍然无法打开。在 Safari 中点击操作扩展不会执行任何操作。
我已经尝试过这些解决方案,但没有一个有效:
我自己想出了这个办法,并想分享这个以防有人遇到同样的问题。
我的问题是我正在调用openContainerApp或redirectToHostApp函数,但viwDidLoad()显然UIResponder尚未准备好。
我将函数调用移至viewWillAppear()并且它起作用了。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
openContainerApp()
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2129 次 |
| 最近记录: |