web-dev-qa-db-fra.com

Ajoutez un ActivityIndicator au bas de UITableView pendant le chargement

Je veux ajouter un ActivityIndicator au bas de mon UITableView lorsque la dernière cellule est affichée, pendant que je récupère plus de données, puis lorsque les données ont été récupérées, cachez-le.

Je défile donc vers le bas -> dernière ligne affichée -> le spinner commence à tourner pendant que les données sont récupérées -> Données récupérées, masque le spinner -> nouvelles données ajoutées à la vue de table.

Des conseils sur la façon d'y parvenir?

Merci ;)

13
Ivan Cantarino

Ajouter cette fonction

 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
    }
}

et tableFooterView devrait se cacher lors du chargement des données.

49
Ayaz Akbar

Swift 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

Une façon serait d'ajouter une cellule personnalisée avec un UIActivityIndicatorView dedans. Vous pouvez le mettre dans une section distincte. Il y a plusieurs façons de procéder.

Ou vous vérifiez ceci: https://github.com/evnaz/ENFooterActivityIndicatorView

2
Lukas Würzburger
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