🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
TableView

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

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

1回答

1767閲覧

【swift4】tableviewで一番下に来た時にデータの再読み込みの方法

6123_sadaharu-.

総合スコア6

TableView

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

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2019/10/12 17:33

編集2019/10/12 17:37

tableviewで一番下に来た時にデータの再読み込みの方法を知りたいです。
プログラムを実行すると開始画面で以下が出力されます。
swift 4, xcode 9.2を使用しています。

indexPath = 0 indexPath = 1 indexPath = 2 indexPath = 3 indexPath = 4 indexPath = 5 indexPath = 6

セルの高さを self.view.bounds.height*0.4 で定義していることから、
実際に開始画面で表示されているのセルの数は3つですので、
indexPath=0~2 が出力されるのを期待しているのですが、swift4だと不可能なのでしょうか?
何か足りない部分などあったら教えていただきたいです。

また、一番下のscrollViewDidScrollを利用して、dataの再読み込みを試しましたが、
tableviewの表示がうまく行きませんでした。
何か改善策などあったら教えていただきたいです。

以下、実行プログラムです。

import UIKit class favoriteViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{ var data = ["ピカチュウ", "コラッタ", "イーブイ", "カビゴン", "ポッポ","dcescds","decs"] @IBOutlet weak var favoriteTV: UITableView! @IBAction func test(_ sender: Any) { self.favoriteTV.reloadData() } override func viewDidLoad() { super.viewDidLoad() favoriteTV.dataSource = self favoriteTV.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } } extension favoriteViewController:UIScrollViewDelegate{ func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return data.count } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return self.view.bounds.height*0.4 } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let i = indexPath.row print("indexPath = (i)") // i < data.count-2 ★右の条件で呼び出ししたい。★ return UITableViewCell() } func tableView(_ tableView: UITableView,didSelectRowAt indexPath: IndexPath) { print("セルをタップしました") tableView.deselectRow(at: indexPath, animated: true) } // func scrollViewDidScroll(_ scrollView: UIScrollView) { // var a = scrollView.contentSize.height - scrollView.contentOffset.y - scrollView.frame.height // // } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自分は実装したことがないですが、
下記のtableViewを一番上でプルダウンしたら更新をかける
http://cocoadays.blogspot.com/2011/07/ios-uitableview.html

を、headerじゃなく、footerで逆(プルアップ?)の操作を行えばできると思いますよ。

追伸

質問の仕方が、新たなデータの取得をしたいということを意味していたので、
上記のように答えましたが、

もし、画面に表示されているcellだけ何かの動作をしたい
(例えばアニメーションや動画の再生、表示画像のDLなど) ということでしたら、

Swift

1func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { 2 3}

を使うべきだと思います。
直前に読み込まれるので、これなら大丈夫だと思います。

投稿2019/10/14 01:19

編集2019/10/14 17:38
hameji

総合スコア1380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

6123_sadaharu-.

2019/10/14 13:43

ご回答ありがとうございます。 新しいアイデアご提示ありがとうございます。 この手順だとユーザに少しだけ煩わしさを与えそうなので、もう少し探してみます。
hameji

2019/10/14 13:54 編集

コードの中身を良くみていませんでした。 具体的に、何で困っているのですか??? 7個データがあって、タイムラグなく、動くように 予め起動時に全て用意されている(最初から7個作られる) で何の問題があるのですか??? 何千個とか何万個とかデータを用意した際 困るという場合を考えているのでしたら、 自分で試してないので、なんとも言えないですが、 dequeuereusablecellなので、メモリに応じて、 自動で管理してくれると思いますが、、、 むしろ、画面に登場してから、用意を開始しているのでは、 遅く、ユーザー体験的に、毎回読み込むクルクル(indicator)が表示されるなど 不便さを感じさせることになると思います。 swift4だと、とありますが、以前のバージョンのswiftでも同様だったと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問