2016-06-23 44 views
2

我是iOS應用程序開發新手。目前,我正在開發一個需要應用程序和網頁之間交互的項目。我知道我可以使用safari視圖控制器在應用程序中加載網頁,並使用網頁右上角的done按鈕返回到應用程序。但我想通過點擊網頁中的鏈接而不是完成按鈕來回到應用程序。我找不到任何解決方案。誰能幫忙?提前謝謝了。Safari視圖控制器

回答

3

爲此,您可以很輕鬆地與自定義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

現在在視圖控制器加載你的網頁,添加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的代表。現在,在我的視圖控制器,我展示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

+0

謝謝大家。這一個給出了所有的細節。這個對我有用。謝謝。 –

+0

@ShalinaHu請接受答案,如果它適合你。 –

相關問題