菜鸟教程小白 发表于 2022-12-12 11:41:27

ios - Safari View Controller


                                            <p><p>我是 iOS 应用程序开发的新手。目前,我正在做一个需要应用程序和网页之间交互的项目。我知道我可以使用 SafariViewController 在应用程序中加载网页,并使用网页右上角的完成按钮返回应用程序。但我想通过单击网页中的链接而不是完成按钮来返回应用程序。我找不到任何解决方案。任何人都可以帮忙吗?非常感谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您可以使用自定义 URL 方案轻松完成此操作。首先向您的 <code>Info.plist</code> 添加一个方案:</p>

<pre><code>&lt;key&gt;CFBundleURLTypes&lt;/key&gt;
&lt;array&gt;
    &lt;dict&gt;
      &lt;key&gt;CFBundleURLName&lt;/key&gt;
      &lt;string&gt;com.mydomain.MyCallback&lt;/string&gt;
      &lt;key&gt;CFBundleURLSchemes&lt;/key&gt;
      &lt;array&gt;
            &lt;string&gt;mydomainwebcallback&lt;/string&gt;
      &lt;/array&gt;
    &lt;/dict&gt;
&lt;/array&gt;
</code></pre>

<p>现在,您有了一种机制,可以从任何被点击的 URL 打开您的应用程序。在这种情况下,url 将是 <code>mydomainwebcallback://whatever</code></p>

<p>现在在您的 ViewController 中加载的网页中,添加这样的 URL:</p>

<pre><code>&lt;a href=&#34;mydomainwebcallback://whateverinfo&#34;&gt;Return to app&lt;/a&gt;
</code></pre>

<p>我将在这里进行简化,但您需要从您的 <code>AppDelegate</code> 中引用您的 <code>SFSafariViewController</code>。首先在 AppDelegate 中:</p>

<pre><code>import UIKit
import SafariServices

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var safariVC: SFSafariViewController?

    func application(application: UIApplication, handleOpenURL url: NSURL) -&gt; Bool {

      // Here we dismiss the SFSafariViewController
      if let sf = safariVC
      {
            sf.dismissViewControllerAnimated(true, completion: nil)
      }

      return true
    }
</code></pre>

<p>如您所见,我将 <code>SFSafariViewController</code> 保留在委托(delegate)中。现在在我显示 VC 的 ViewController 中:</p>

<pre><code>import UIKit
import SafariServices

class ViewController: UIViewController {

    @IBAction func showSafariVC(sender: UIButton) {

      if let url = NSURL(string: &#34;https://mywebserver/callback.html&#34;)
      {
            let delegate = UIApplication.sharedApplication().delegate as! AppDelegate
            delegate.safariVC = SFSafariViewController(URL: url)
            presentViewController(delegate.safariVC!, animated: true, completion: nil)
      }
    }
}
</code></pre>

<p>现在,当您点击链接时,它会关闭 <code>SFSafariViewController</code>。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - SafariViewController ,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/37981306/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/37981306/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - Safari View Controller