2016-06-13 4 views
0

私は現在、pdfsを使いこなしています。私はシステムにPDFを読み込み、同じPDFを書き出して全体の手順を理解しようとしています。あらかじめ作成された非同期関数Swiftにコールバックを追加する

問題はWebからpdfをロードする必要があり、WebViewUI.loadRequestが非同期であるため、時間内に完了しないということです。

override func viewDidLoad() { 
     super.viewDidLoad() 

     let filePath = getDocumentsDirectory().stringByAppendingPathComponent("output.pdf") 

     let url : NSURL! = NSURL(string: "http://www.nhs.uk/NHSEngland/Healthcosts/Documents/2014/HC5(T)%20June%202014.pdf") 

     loadTemplate(url, completion: {(webView: UIWebView) -> Void in 
      print("callback started") 
      let pdf = self.toPDF(webView) 

      do { 
       pdf!.writeToFile(filePath, atomically: true) 
      } catch { 
       // failed to write file – bad permissions, bad filename, missing permissions, or more likely it can't be converted to the encoding 
      } 

      print("callback started") 

     }) 

     print("Finished viewDidLoad") 

    } 

    func loadTemplate(url: NSURL, completion: (webView: UIWebView) -> Void) { 
     print("Start loadTemplate") 
     // do some crunching to create the SketchAnimation instance... 
     let webView = UIWebView(frame: CGRectMake(20, 100, 300, 40)) 
     webView.loadRequest(NSURLRequest(URL: url)) 

     self.view.addSubview(webView) 

     // invoke the completion callback 
     completion(webView: webView) 

     print("finished loadTemplate") 
    } 

loadTemplateの代わりにloadRequestにコールバックを追加するにはどうすればよいですか?

答えて

0

あなたはまったくそうではありません。ビューコントローラをWebビューのデリゲートとして設定し、webViewDidFinishLoadメソッドを実装します。その方法では、終了したロードが終了したロードであることを確認し、そうであれば、ロードが完了したときに実行するコードを呼び出します。ここで

はそれを設定する方法の基本的な例です。

// 
// ViewController.swift 
// 

import UIKit 

class ViewController: UIViewController, UIWebViewDelegate { 

    @IBOutlet var webView: UIWebView! 

    var url = NSURL(string: "http://google.com") 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     //load initial URL 
     let req = NSURLRequest(URL : url!) 
     webView.delegate = self 
     webView.loadRequest(req) 
    } 

    func webViewDidStartLoad(webView : UIWebView) { 
     print("AA") 
    } 

    func webViewDidFinishLoad(webView : UIWebView) { 
     print("BB") 
    } 

} 
関連する問題