web-dev-qa-db-ja.com

ロード中に、UITableViewの下部にActivityIndi​​catorを追加します

最後のセルが表示されたときに、さらにデータを取得しているときにActivityIndi​​catorをUITableViewの下部に追加し、データが取得されたときに非表示にします。

一番下までスクロール->表示された最後の行->データがフェッチされている間にスピナーが回転を開始->フェッチされたデータ、スピナーを非表示->テーブルビューに追加された新しいデータ。

これを達成する方法に関するヒントはありますか?

ありがとう;)

13
Ivan Cantarino

この機能を追加

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let lastSectionIndex = tableView.numberOfSections - 1
    let lastRowIndex = tableView.numberOfRows(inSection: lastSectionIndex) - 1
    if indexPath.section ==  lastSectionIndex && indexPath.row == lastRowIndex {
       // print("this is the last cell")
        let spinner = UIActivityIndicatorView(activityIndicatorStyle: .gray)
        spinner.startAnimating()
        spinner.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: tableView.bounds.width, height: CGFloat(44))

        self.tableview.tableFooterView = spinner
        self.tableview.tableFooterView?.isHidden = false
    }
}

また、tableFooterViewはデータの読み込み時に非表示にする必要があります。

49
Ayaz Akbar

スイフト4

 func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
    let lastSectionIndex = tableView.numberOfSections - 1
    let lastRowIndex = tableView.numberOfRows(inSection: lastSectionIndex) - 1
    if indexPath.section ==  lastSectionIndex && indexPath.row == lastRowIndex {
       // print("this is the last cell")
        let spinner = UIActivityIndicatorView(style: .gray)
        spinner.startAnimating()
        spinner.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: tableView.bounds.width, height: CGFloat(44))

        self.tableview.tableFooterView = spinner
        self.tableview.tableFooterView?.isHidden = false
    }
}
8
Sachin Rasane

1つの方法は、UIActivityIndi​​catorViewを含むカスタムセルを追加することです。別のセクションに配置できます。それを行うには多くの方法があります。

または、これを確認してください: https://github.com/evnaz/ENFooterActivityIndi​​catorView

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

    let total = (self.array.count )
    if (indexPath.item + 1) == (self.array.count ){
        self.limit = Int(self.limit+20) // table item render limit
        if total < limit {
            let spinner = UIActivityIndicatorView(style: .gray)
            spinner.startAnimating()
            spinner.frame = CGRect(x: CGFloat(0), y: CGFloat(0), width: tableView.bounds.width, height: CGFloat(44))

            self.myTableView.tableFooterView = spinner
            self.myTableView.tableFooterView?.isHidden = false
        }
    }
}
0
Sumona Salma