質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

Swiftで通信後TableViewCellに画像表示できない

oOz
oOz

総合スコア0

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

0評価

0クリップ

2403閲覧

投稿2018/10/28 06:10

現在、このような形でqiitaのAPIにアクセスしています。
取得したiconのurlからイメージを取得してcellに表示しようとしていますが、イメージ画像が表示されません。
cellをタップすると一時的に表示はされるのでイメージは取得できています。
iconのurlからイメージ取得後にtableViewがリロードできていないんだと思うのですが、どのタイミングでリロードすればいいのかわかりません。
またイメージを表示するために良い方法があればご教示いただければ助かります。

swift

import UIKit struct Article: Codable { var title: String var user: User struct User: Codable { var id: String var iconUrl: String enum CodingKeys: String, CodingKey { case id = "id" case iconUrl = "profile_image_url" } } var url: String var tags: [Tag] struct Tag: Codable { var name: String } } struct Qiita { static func fetchArticle(completion: @escaping ([Article]) -> Swift.Void) { let url = "https://qiita.com/api/v2/items" guard var urlComponents = URLComponents(string: url) else { return } urlComponents.queryItems = [ URLQueryItem(name: "per_page", value: "50"), ] let task = URLSession.shared.dataTask(with: urlComponents.url!) { data, response, error in guard let jsonData = data else { return } do { let articles = try JSONDecoder().decode([Article].self, from: jsonData) completion(articles) } catch { print(error.localizedDescription) } } task.resume() } } class ViewController: UIViewController { private var tableView = UITableView() fileprivate var articles: [Article] = [] override func viewDidLoad() { super.viewDidLoad() title = "最新記事" setUpTableView: do { tableView.frame = view.frame tableView.dataSource = self tableView.delegate = self view.addSubview(tableView) } Qiita.fetchArticle(completion: { (articles) in self.articles = articles DispatchQueue.main.async { self.tableView.reloadData() } }) } } extension ViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell") let article = articles[indexPath.row] cell.textLabel?.text = article.title cell.detailTextLabel?.text = article.user.id cell.imageView?.downloadImage(from: article.user.iconUrl) return cell } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return articles.count } } extension UIImageView { func downloadImage(from url: String) { let urlRequest = URLRequest(url: URL(string: url)!) let task = URLSession.shared.dataTask(with: urlRequest) { (data,response,error) in if error != nil { print(error as Any) return } DispatchQueue.main.async { self.image = UIImage(data: data!) } } task.resume() } } extension ViewController: UITableViewDelegate { func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let article = articles[indexPath.row] let articleURL = URL(string: article.url) openWithSafari(url: articleURL) } func openWithSafari(url: URL?) { guard let openUrl = url else { print("無効なURLです") return } if UIApplication.shared.canOpenURL(openUrl as URL) { print(openUrl) UIApplication.shared.open(openUrl) } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。