TableViewCellにImageを追加。非同期で画像取得

2020/09/26確認

f:id:fedora9:20200926225319p:plain

command + 1 して、Main.storyboardを選択して画面を選択して、右上の+をクリックして、Image Viewを追加します。

f:id:fedora9:20200926224900p:plain

Editor - Document Outlineで表示して、Image ViewをTable/cell/Content Viewの下にドラッグで移動します。

f:id:fedora9:20200926225014p:plain

Image ViewのTagを1に変更します。重複しない任意の数字。

f:id:fedora9:20200926225110p:plain
非同期にしないと、スクロールした時に引っかかります。

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

    cell.textLabel!.text = articles[indexPath.row]["title"]! as? String

    cell.detailTextLabel!.text = articles[indexPath.row]["created_at"]! as? String

    // セルに表示する画像を設定する

    let articleUser = articles[indexPath.row]["user"] as AnyObject?

    let profileImageUrl = articleUser?["profile_image_url"]

    let profileImage = cell.viewWithTag(1) as! UIImageView

    let url: URL? = URL(string: profileImageUrl as! String)

    profileImage.loadImageAsynchronously(url: url, defaultUIImage: nil)

    return cell

  }

 

[Swift4] URL指定した画像を非同期でUIImageViewにセットする、便利なExtension - Qiita

// 指定URLから画像を読み込み、セットする

// defaultUIImageには、URLからの読込に失敗した時の画像を指定する

extension UIImageView {

  func loadImageAsynchronously(url: URL?, defaultUIImage: UIImage? = nil) -> Void {

    if url == nil {

      self.image = defaultUIImage

      return

    }

 

    DispatchQueue.global().async {

      do {

        let imageData: Data? = try Data(contentsOf: url!)

        DispatchQueue.main.async {

          if let data = imageData {

            self.image = UIImage(data: data)

          } else {

            self.image = defaultUIImage

          }

        }

      }

      catch {

        DispatchQueue.main.async {

          self.image = defaultUIImage

        }

      }

    }

  }

}

 

Type 'Any' has no subscript で悩まされる - Swiftサラリーマン

  

Swift UITableView UITableViewCell にUIImageViewとUITextViewを入れて 写真付き記事一覧の実装手順 - Qiita

 

How To Display Or Hide View Controller Scene ( Document Outline ) Panel In Xcode Project

 

【Swift4】UIImageでURLで画像を指定する - ハイパーマッスルエンジニアになりたい

 

SwiftでCustomCellを作って画像付きリスト表示 - Qiita