使用 swift 在 WebView 中显示列表中的 PDF

Displaying PDF from list in WebView using swift

我的应用程序中嵌入了 PDF 列表。我想使用 webView 一次显示一个 pdf,select 从 table 视图控制器编辑。来自 Neil Smith 的示例程序使用 webView 显示网页,使用详细视图控制器中的以下代码片段:

if let address = webSite {
    let webURL = NSURL(string: address)
    let urlRequest = NSURLRequest(URL: webURL!)
    webView.loadRequest(urlRequest)

下面的代码片段做了我想要它做的,但只针对文件 "TestPDF"

if let pdf = NSBundle.mainBundle().URLForResource("TestPDF", withExtension: "pdf",
    subdirectory: nil, localization: nil)  {
        let req = NSURLRequest(URL: pdf)
        let webView = UIWebView(frame: CGRectMake(20,20,self.view.frame.size.width-40,self.view.frame.size.height-40))
        webView.loadRequest(req)
        self.view.addSubview(webView)

我想更改此设置,使其 select 成为列表中的 PDF,例如:

pdfAddresses = [
    "TestPDF.pdf",
    "TestPDF2.pdf",
    "TestPDF3.pdf",
    "TestPDF4.pdf",
    "testPDF5.pdf"]

segue 代码适用于 webAddress 列表:

if segue.identifier == "ShowAttractionDetails" {
        let detailViewController = segue.destinationViewController
            as! AttractionDetailViewController

        let myIndexPath = self.tableView.indexPathForSelectedRow()
        let row = myIndexPath?.row
        detailViewController.webSite = webAddresses[row!]

所以我不知道该怎么做是如何select pdf 文件,基于table 视图控制器。我想我需要创建一个变量......但我不确定。谢谢你的建议。

这里有一个简单的例子供您参考:

TableViewController.swift

import UIKit

class TableViewController: UITableViewController {
    //Your PDF list
    var pdfAddresses = [
        "TestPDF",
        "TestPDF2",
        "TestPDF3",
        "TestPDF4"]


    // MARK: - Table view data source

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return pdfAddresses.count
    }


    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! UITableViewCell

        // Configure the cell...
        cell.textLabel?.text = pdfAddresses[indexPath.row]  //Display PDF list in tableView
        return cell
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

        if segue.identifier == "ShowAttractionDetails" {
            let detailViewController = segue.destinationViewController as! AttractionDetailViewController

            let myIndexPath = self.tableView.indexPathForSelectedRow()
            let row = myIndexPath?.row
            //Pass selected cell title to next View
            detailViewController.webSite = pdfAddresses[row!]
        }
    }
}

AttractionDetailViewController.swift

import UIKit

class AttractionDetailViewController: UIViewController {
    //Outlet of webView but you can create it programatically too.
    @IBOutlet weak var webView: UIWebView!
    //This will hold data which is passed from first View
    var webSite : String?
    override func viewDidLoad() {
        super.viewDidLoad()
        //Load selected PDF into webView.
        if let webSite = webSite {
            println(webSite)
            if let pdf = NSBundle.mainBundle().URLForResource(webSite, withExtension: "pdf", subdirectory: nil, localization: nil)  {
                let req = NSURLRequest(URL: pdf)
                webView.loadRequest(req)
            }
        }
    }
}

查看此 SAMPLE 项目以获取更多信息。