facebook twitter hatena line email

「Ios/swift/TableView/API画像連動スクロール読み込み」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「==事前準備== 以下を事前に見ておく ios/swift/TableView/画像付き [ショートカット] ios/swift/外部ライブラリ/Alamofire [ショート...」)
 
行10: 行10:
 
==サンプル==
 
==サンプル==
 
一番下までスクロールすると次を読み込む
 
一番下までスクロールすると次を読み込む
 +
 +
-ViewController.swift
 +
import UIKit
 +
import Alamofire
 +
class ViewController: UIViewController ,UITableViewDataSource, UITableViewDelegate {
 +
    @IBOutlet weak var imgTableView: UITableView!
 +
    private var _imgs: Array<ImgInit> = []
 +
    private var isLoading: Bool = false
 +
    private var _page: Int = 1
 +
    override func viewDidLoad() {
 +
        super.viewDidLoad()
 +
        imgTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
 +
        imgTableView.delegate = self
 +
        imgTableView.dataSource = self
 +
        apiexec()
 +
    }
 +
    private func apiexec() {
 +
        Alamofire.request(.GET, "http://localhost/api/testimgs", parameters: ["page": self._page]).responseJSON { response in
 +
            if response.result.isSuccess {
 +
                let jsonDic = response.result.value as! NSDictionary
 +
                let imgs = jsonDic["imgs"] as! NSArray
 +
                let cnt = jsonDic["cnt"] as! Int
 +
                print(cnt)
 +
                for img in imgs {
 +
                    let name:String = img["name"] as! String
 +
                    let thumbnail:String = img["thumbnail"] as! String
 +
                    let _img = ImgInit(name: name, thumbnail: thumbnail) as ImgInit
 +
                    self._imgs.append(_img)
 +
                }
 +
                self.imgTableView.reloadData() // 更新
 +
                self.isLoading = false
 +
            }
 +
        }
 +
    }
 +
    override func didReceiveMemoryWarning() {
 +
        super.didReceiveMemoryWarning()
 +
    }
 +
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
 +
        return self._imgs.count
 +
    }
 +
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
 +
        print(self._imgs[indexPath.row].thumbnail)
 +
        let cell =
 +
            tableView.dequeueReusableCellWithIdentifier("CustomCell") as! CustomTableViewCell
 +
        cell.setCell(self._imgs[indexPath.row].thumbnail, text: self._imgs[indexPath.row].name)
 +
        return cell
 +
    }
 +
    func scrollViewDidScroll(scrollView: UIScrollView) {
 +
        var contentOffsetWidthWindow = self.imgTableView.contentOffset.y + self.imgTableView.bounds.size.height
 +
        let eachToBottom = contentOffsetWidthWindow >= self.imgTableView.contentSize.height
 +
        if (!eachToBottom || self.isLoading) {
 +
            return;
 +
        }
 +
        self.isLoading = true
 +
        self._page = self._page + 1
 +
        apiexec()
 +
    }
 +
}

2016年6月25日 (土) 08:42時点における版

事前準備

以下を事前に見ておく

ios/swift/TableView/画像付き [ショートカット]

ios/swift/外部ライブラリ/Alamofire [ショートカット]

ios/swift/TableView/API画像連動 [ショートカット]

サンプル

一番下までスクロールすると次を読み込む

-ViewController.swift

import UIKit
import Alamofire
class ViewController: UIViewController ,UITableViewDataSource, UITableViewDelegate {
   @IBOutlet weak var imgTableView: UITableView!
   private var _imgs: Array<ImgInit> = []
   private var isLoading: Bool = false
   private var _page: Int = 1
   override func viewDidLoad() {
       super.viewDidLoad()
       imgTableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
       imgTableView.delegate = self
       imgTableView.dataSource = self
       apiexec()
   }
   private func apiexec() {
       Alamofire.request(.GET, "http://localhost/api/testimgs", parameters: ["page": self._page]).responseJSON { response in
           if response.result.isSuccess {
               let jsonDic = response.result.value as! NSDictionary
               let imgs = jsonDic["imgs"] as! NSArray
               let cnt = jsonDic["cnt"] as! Int
               print(cnt)
               for img in imgs {
                   let name:String = img["name"] as! String
                   let thumbnail:String = img["thumbnail"] as! String
                   let _img = ImgInit(name: name, thumbnail: thumbnail) as ImgInit
                   self._imgs.append(_img)
               }
               self.imgTableView.reloadData() // 更新
               self.isLoading = false
           }
       }
   }
   override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
   }
   func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return self._imgs.count
   }
   func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
       print(self._imgs[indexPath.row].thumbnail)
       let cell =
           tableView.dequeueReusableCellWithIdentifier("CustomCell") as! CustomTableViewCell
       cell.setCell(self._imgs[indexPath.row].thumbnail, text: self._imgs[indexPath.row].name)
       return cell
   }
   func scrollViewDidScroll(scrollView: UIScrollView) {
       var contentOffsetWidthWindow = self.imgTableView.contentOffset.y + self.imgTableView.bounds.size.height
       let eachToBottom = contentOffsetWidthWindow >= self.imgTableView.contentSize.height
       if (!eachToBottom || self.isLoading) {
           return;
       }
       self.isLoading = true
       self._page = self._page + 1
       apiexec()
   }
}