• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - Safari View Controller

[复制链接]
菜鸟教程小白 发表于 2022-12-12 11:41:27 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我是 iOS 应用程序开发的新手。目前,我正在做一个需要应用程序和网页之间交互的项目。我知道我可以使用 Safari View Controller 在应用程序中加载网页,并使用网页右上角的完成按钮返回应用程序。但我想通过单击网页中的链接而不是完成按钮来返回应用程序。我找不到任何解决方案。任何人都可以帮忙吗?非常感谢。



Best Answer-推荐答案


您可以使用自定义 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 打开您的应用程序。在这种情况下,url 将是 mydomainwebcallback://whatever

现在在您的 View Controller 中加载的网页中,添加这样的 URL:

<a href="mydomainwebcallback://whateverinfo">Return to app</a>

我将在这里进行简化,但您需要从您的 AppDelegate 中引用您的 SFSafariViewController。首先在 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 的 View Controller 中:

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

关于ios - Safari View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37981306/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap