首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Alamofire生成的数据从tableview推送到webview

如何将Alamofire生成的数据从tableview推送到webview
EN

Stack Overflow用户
提问于 2017-10-26 22:22:36
回答 1查看 570关注 0票数 0

我对斯威夫特语有点陌生。因此,我需要一些关于如何将Alamofire生成的在线数据从一个视图控制器中的tableview推送到位于另一个视图控制器中的webview的一些建议。更具体地说,在JSON数据中,有各种带有标记“url”的元素。我的目标是将这些url元素与适当的tableview单元格相匹配,以便当单击单元格时,它会将用户带到新视图控制器中的URL。虽然我理解数组是如何工作的,但我使用的JSON数据是字典的数据。作为回报,我已经花了一段时间在网上搜索任何可能存在的教程。作为参考,我在这篇文章中包含了我的代码。如能提供有关这一问题的任何资料,将不胜感激。

代码语言:javascript
复制
class TableViewController: UITableViewController {
    var responseArray = [[String:Any]]()
    var mySong = 0


    override func viewDidLoad() {
        super.viewDidLoad()
        Alamofire.request("https://rss.itunes.apple.com/api/v1/us/apple-music/top-songs/all/10/explicit.json").responseJSON { response in
            if let json = response.result.value as? [String:Any],
                let feed = json["feed"] as? [String:Any],
                let results = feed["results"] as? [[String:Any]] {
                print(results)
                self.responseArray = results
                self.tableView.reloadData()
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

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

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


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "top10", for: indexPath)
        let song = responseArray[indexPath.row]
        cell.textLabel?.text = song["name"] as? String
        cell.detailTextLabel?.text = song["artistName"] as? String
        return cell
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        mySong = indexPath.row
        performSegue(withIdentifier: "iTunes", sender: self)
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 05:36:23

你可以像使用数组一样使用字典。唯一的区别是,通过下标访问字典值并不能保证结果,因此返回值的类型是可选的。

回到您的问题上,我想您希望打开另一个ViewController,其中包含一个导航到URL的WebView。此URL由在此导航之前单击的单元格确定。

我查看了API,因为您还没有提到,我将假设您希望加载响应中按照artistUrl键给出的网页。

只需将以下代码添加到didSelectRowAt方法:

代码语言:javascript
复制
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    // safely unwrap artistUrl
    // init WebViewController
    // set url for WebViewController
    if let artistUrl = responseArray[indexPath.row]["artistUrl"], let viewController = storyboard?.instantiateViewController(withIdentifier: "WebViewController") as? WebViewController {
        viewController.url = artistUrl
        present(viewController, animated: true, completion: nil)
    }
}

创建一个WebViewController,如果您已经有了一个,那么只需稍微修改一下代码。

代码语言:javascript
复制
class WebViewController: UIViewController {

    @IBOutlet weak var webView: UIWebView!

    var url: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        // safely unwrap url, then convert it to URL
        if let url = url, let urlForRequest = URL(string: url) {
            let request = URLRequest(url: urlForRequest)
            webView.loadRequest(request)
        }
    }
}

最后,对于这个API,我注意到所有的URL都是HTTPS。有时,如果您有非HTTPS,那么您需要在您的plist中将AllowArbitraryLoads设置为YES。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46964736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档