2016-06-23 6 views
2

Я новичок в разработке приложений для iOS. В настоящее время я работаю над проектом, который требует взаимодействия между приложением и веб-страницей. Я знаю, что я могу использовать контроллер просмотра сафари для загрузки веб-страницы в приложении и использовать кнопку «Готово» в правом углу веб-страницы для возврата в приложение. Но я хочу вернуться в приложение, щелкнув ссылку на веб-странице, а не кнопку «Готово». Я не мог найти решения для этого. Может ли кто-нибудь помочь? Спасибо заранее.Контроллер просмотра 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, пожалуйста, примите ответ, если он сработает для вас. –

Смежные вопросы