我是 iOS 应用程序开发的新手。目前,我正在做一个需要应用程序和网页之间交互的项目。我知道我可以使用 safari 视图控制器在应用程序中加载网页,并使用网页右上角的完成按钮返回应用程序。但我想通过单击网页中的链接而不是完成按钮来返回应用程序。我找不到任何解决方案。任何人都可以帮忙吗?提前谢谢了。
2 回答
您可以使用自定义 URL 方案轻松完成此操作。首先将一个方案添加到您的Info.plist
:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.mydomain.MyCallback</string>
<key>CFBundleURLSchemes</key>
<array>
<string>mydomainwebcallback</string>
</array>
</dict>
</array>
现在,您有了一种机制,可以从任何被点击的 URL 打开您的应用程序。在这种情况下,网址将是mydomainwebcallback://whatever
现在在您的视图控制器中加载的网页中,添加如下 URL:
<a href="mydomainwebcallback://whateverinfo">Return to app</a>
我将在这里进行简化,但您需要SFSafariViewController
从您的AppDelegate
. 首先在 AppDelegate 中:
import UIKit
import SafariServices
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var safariVC: SFSafariViewController?
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
// Here we dismiss the SFSafariViewController
if let sf = safariVC
{
sf.dismissViewControllerAnimated(true, completion: nil)
}
return true
}
如您所见,我将其保留SFSafariViewController
在 Delegate 中。现在在我显示 VC 的视图控制器中:
import UIKit
import SafariServices
class ViewController: UIViewController {
@IBAction func showSafariVC(sender: UIButton) {
if let url = NSURL(string: "https://mywebserver/callback.html")
{
let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
delegate.safariVC = SFSafariViewController(URL: url)
presentViewController(delegate.safariVC!, animated: true, completion: nil)
}
}
}
现在,当您点击链接时,它将关闭SFSafariViewController
.
这对我有用,但 wkwebview。 https://github.com/liqichao/wkwebview-test
这个例子是一个 sfsafariview 但你必须使用 inner 和 wkwebview https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch11p552webkit/ch24p825webview/WebViewController.swift