自作アプリを作ってみた -アプリ名:hanagasaki- qiita
はじめに
自作アプリを作りましたので、画面毎の機能とコードを説明したいと思います。
今回、qiita
画面の機能とコードを説明が記載されています。
使用環境
● OS:macOS Big Sur 11.3.1
● Xcode:12.5
● Swift:5.4
● DB Browser for SQLite:3.12.1
// QiitaViewController.swift
import UIKit
class QiitaViewController: BaseViewController {
@IBOutlet weak var qiitaTableView: UITableView!
let cellid = "cellid"
var qiitas = [Qiita]()
override func viewDidLoad() {
super.viewDidLoad()
addHeaderBar("Qiita",
UIBarButtonItem(image: #imageLiteral(resourceName: "bars_24"), style: .plain, target: self, action: #selector(tapHambugerMenu)),
UIBarButtonItem(image: #imageLiteral(resourceName: "qiitaicon"), style: .done, target: self, action: #selector(tapQiitaIcon)))
qiitaTableView.delegate = self
qiitaTableView.dataSource = self
qiitaTableView.register(QiitaTableViewCell.self, forCellReuseIdentifier: cellid)
getQiitaApi()
}
func getQiitaApi() {
let page = 20
guard let url = URL(string: "https://qiita.com/api/v2/items?page=1&per_page=\(page)") else {return}
var request = URLRequest(url: url)
request.httpMethod = "GET"
let task = URLSession.shared.dataTask(with: url) { (data, response, err) in
if let err = err {
print("情報の取得に失敗しました。:", err)
return
}
if let data = data {
do {
//let json = try JSONSerialization.jsonObject(with: data, options: .fragmentsAllowed)
let qiita = try JSONDecoder().decode([Qiita].self, from: data)
self.qiitas = qiita
DispatchQueue.main.async {
self.qiitaTableView.reloadData()
}
print("json: ", qiita)
} catch(let err) {
print("情報の取得に失敗しました。:", err)
}
}
}
task.resume()
}
}
extension QiitaViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return qiitas.count
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 120
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = qiitaTableView.dequeueReusableCell(withIdentifier: cellid, for: indexPath) as! QiitaTableViewCell
cell.qiita = qiitas[indexPath.row]
cell.backgroundColor = .clear
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let url = URL(string: qiitas[indexPath.row].url)
if UIApplication.shared.canOpenURL(url!) {
UIApplication.shared.open(url!)
}
}
}
// QiitaTableViewCell.swift
import UIKit
class QiitaTableViewCell: UITableViewCell {
var qiita: Qiita? {
didSet {
bodyTextLabel.text = qiita?.title
let url = URL(string: qiita?.user.profileImageUrl ?? "")
do {
let data = try Data(contentsOf: url!)
let image = UIImage(data: data)
userImageView.image = image
}catch let err {
print("Error : \(err.localizedDescription)")
}
}
}
let userImageView: UIImageView = {
let iv = UIImageView()
iv.contentMode = .scaleAspectFill
iv.translatesAutoresizingMaskIntoConstraints = false
iv.clipsToBounds = true
return iv
}()
let bodyTextLabel: UILabel = {
let label = UILabel()
label.text = "something in here"
label.font = .systemFont(ofSize: 15)
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
addSubview(userImageView)
addSubview(bodyTextLabel)
[
userImageView.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 10),
userImageView.centerYAnchor.constraint(equalTo: centerYAnchor),
userImageView.widthAnchor.constraint(equalToConstant: 50),
userImageView.heightAnchor.constraint(equalToConstant: 50),
bodyTextLabel.leadingAnchor.constraint(equalTo: userImageView.trailingAnchor, constant: 20),
bodyTextLabel.centerYAnchor.constraint(equalTo: centerYAnchor),
].forEach{ $0.isActive = true }
userImageView.layer.cornerRadius = 50 / 2
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
おわりに
最後まで読んで下さりありがとうございます。
次回は、card 画面の記事を投稿したいと思います。
この記事が何かの実装に参考になれば幸いです。
参考文献
この記事が気に入ったらサポートをしてみませんか?