「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() } }