Edited at

Webkit を使う


Webkitを使ってみました。

こんにちわ!初心者です!

WKWebViewこれが使いたかったので、

今回はQitaの記事を取得してtableViewをタップしたら

詳細に飛ぶ。みたいなことをしました。

cellはカスタマイズみたいなのするためにxibファイル作成してますが特に特別なことしませんでした。

もっとできるようになりたいので、ぜひコメントに指摘をよろしくお願いします!!!

できるようになりたい!!!

すみません、めちゃくちゃ醜い!あ、見にくいです。

押したら 記事一覧 み、み、見にくい

表示できました。


detailQitaViewController.swift

import UIKit

import WebKit

class DetailQitaViewContoller: UIViewController {

@IBOutlet weak var qitaWebView: WKWebView!
var url: String!

override func viewDidLoad() {
super.viewDidLoad()
if let url = URL(string: self.url) {
let request = URLRequest(url: url)
self.qitaWebView.load(request)
}
}
}



QitaViewController.swift

import UIKit

class QitaViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var tableView: UITableView!

var url: URL! = nil
var articles: [[String: Any]] = [] {
didSet {
tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()

tableView.delegate = self
tableView.dataSource = self
tableView.register(UINib(nibName: "TableViewCell", bundle: nil), forCellReuseIdentifier: "TableViewCell")
fetchArticles()

}

private func fetchArticles() {
guard let url: URL = URL(string: "http://qiita.com/api/v2/items") else { return }
let task: URLSessionTask = URLSession.shared.dataTask(with: url, completionHandler: { data, response, error in
do {
guard let data = data else { return }
guard let json = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as? [Any] else { return }
let articles = json.compactMap { (article) -> [String: Any]? in
return article as? [String: Any]
}
DispatchQueue.main.async() {
self.articles = articles
}
} catch {
print("Error")
}
})
task.resume()
}
// overrideしてるらしいので、segueに反応してこれが行われる
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let indexPath = self.tableView.indexPathForSelectedRow {
let article = articles[indexPath.row]
print(article)
let controller = segue.destination as! DetailQitaViewContoller
controller.url = article["url"] as? String
controller.title = article["title"] as? String
}
}
}


画面遷移参考記事

https://qiita.com/fromage-blanc/items/3ea2dfe97d4c2d6f0646


tableView.swift

import UIKit

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

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

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: TableViewCell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as! TableViewCell
let article = articles[indexPath.row]
let title = article["title"] as? String
cell.textLabel?.text = title
cell.textLabel?.numberOfLines=0
cell.textLabel?.textColor = UIColor.green
return cell
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
tableView.estimatedRowHeight = 100
//UITableView.automaticDimensionでcellの高さを可変にする
return UITableView.automaticDimension
}
//これがタップしたら移動するやつ
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "gotoQitaDtail", sender: nil)
}
}