2016-01-20 18 views
0

你好,我有簡單的應用程序我嘗試創建HTML到PDF到網頁視圖並期待成功,但我想用UIActivityViewController添加按鈕份額(進入打印,郵件等)斯威夫特UIWebView的PDF查看UIActivityViewController錯誤

我的代碼這裏。

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


    createPDF(); 
    loadPDF("file.pdf"); 

    // ActivityViewController 

    btn!.setTitle("Open Menu", forState: .Normal) 
    btn!.addTarget(self, action: "pressBtn:", forControlEvents: .TouchUpInside) 
    btn!.sizeToFit() 
    btn!.center = view.center 
    view.addSubview(btn!) 

} 


func createPDF() { 
    let html = "<b>Hello <i>World!</i></b> <p>Generate PDF file from HTML in Swift</p>" 
    let fmt = UIMarkupTextPrintFormatter(markupText: html) 

    // 2. Assign print formatter to UIPrintPageRenderer 

    let render = UIPrintPageRenderer() 
    render.addPrintFormatter(fmt, startingAtPageAtIndex: 0) 

    // 3. Assign paperRect and printableRect 

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi 
    let printable = CGRectInset(page, 0, 0) 

    render.setValue(NSValue(CGRect: page), forKey: "paperRect") 
    render.setValue(NSValue(CGRect: printable), forKey: "printableRect") 

    // 4. Create PDF context and draw 

    let pdfData = NSMutableData() 
    UIGraphicsBeginPDFContextToData(pdfData, CGRectZero, nil) 

    for i in 1...render.numberOfPages() { 

     UIGraphicsBeginPDFPage(); 
     let bounds = UIGraphicsGetPDFContextBounds() 
     render.drawPageAtIndex(i - 1, inRect: bounds) 
    } 

    UIGraphicsEndPDFContext(); 

    // 5. Save PDF file 

    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 

    pdfData.writeToFile("\(documentsPath)/file.pdf", atomically: true) 
} 


func loadPDF(filename: String) { 
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 
    let filePath = "\(documentsPath)/file.pdf" 
    let url = NSURL(fileURLWithPath: filePath) 
    let urlRequest = NSURLRequest(URL: url) 
    webView!.loadRequest(urlRequest) 
} 


func pressBtn(sender:UIButton){ 



    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] 
    let filePath = "\(documentsPath)/file.pdf" 
    let activityItems = [filePath] 

    let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil) 
    presentViewController(activityViewController, animated: true, completion: nil) 

} 



override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

當點擊按鈕給出了這樣的錯誤

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x79b601b0>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.' 
*** First throw call stack: 

感謝您的幫助。

+0

你收到此僅在iPad上出錯?這應該有所幫助:http://stackoverflow.com/questions/25644054/uiactivityviewcontroller-crashing-on-ios8-ipads – Tish

回答

1

您是否曾嘗試在調用presentViewController之前指定源視圖?

let activityViewController = UIActivityViewController(activityItems: activityItems, applicationActivities: nil) 
activityViewController.popoverPresentationController?.sourceView = sender 
presentViewController(activityViewController, animated: true, completion: nil) 
1

的錯誤可能是別的東西,

任何方式,您可能需要使用UIDocumentInteractionController不UIActivityController

UTI設置爲 「com.adobe.pdf」