10
votes

UitailView: code d'exécution lorsque la tablefooterview est affichée?

J'utilise l'UIView TablefooTerview de dans mon uableview pour afficher une étiquette" de chargement plus "au bas de ma table. Lorsque l'UIView dans TABLEFOOTERVIEW est affiché, j'ai besoin de démarrer un téléchargement paresseux de contenu. Comment savoir quand la tableFooTerview est affichée?


0 commentaires

5 Réponses :


0
votes

Parce que la table de table est, comme vous le dites, un UIView il gère le dessin dans Drawrect :. Si vous écrasez, vous pouvez obtenir un avis.

EDIT: Ancienne réponse était fausse.


0 commentaires

1
votes

Vous pouvez convertir le cadre du pied de page en coordonnées de la fenêtre et les comparer. Lorsque le pied de page est caché, il suppose qu'il possède des coordonnées d'origine Y> 480 (pour le mode portrait), lorsque le pied de page apparaît alors des coordonnées d'origine Y <480. Vous pouvez comparer la méthode Didscroll.

Merci, j'espère que cela vous aidera.

Voir la méthode Convertrect: toView:


0 commentaires

12
votes

Au lieu de déterminer lorsque la vue de la page de page vous indiquera pour que vous puissiez vérifier quand la dernière ligne de la table est demandée et chargez les données. Le nombre de fois qu'un utilisateur fait défiler jusqu'à la dernière rangée sans faire défiler pour voir le pied de page les plus peu nombreux. L'effet sera le même, c'est-à-dire que vous savez lorsque l'utilisateur a défilé en bas et que vous devez charger davantage de données.

Ceci peut être facilement implémenté dans TableView: Cellfrowrowindexpath: . En gardant une trace de ce que IndexPath est le dernier et à la mise à jour à chaque fois que de nouvelles lignes sont ajoutées ou supprimées, vous pouvez simplement vérifier si le index de la cellule demandée est identique à l'index de la dernière ligne et déclenche la chargement paresseux de Plus de données de là, de la même manière que vous le faites actuellement.


3 commentaires

Votez-vous parce que c'est comme ça que je l'ai mis en œuvre une fois - me semble la solution la plus propre.


C'est exactement ce que je fais actuellement maintenant. Je vais juste continuer à le faire comme ça.


Je fais aussi la même chose mais est-ce le meilleur moyen? 🙄



0
votes

Si votre TABLEFOOTERVIEW CODE> observe les modifications apportées à la propriété contentoffset de la table CODE> (et peut-être aussi dans la propriété de la table de la table code>), vous pouvez calculer Exactement quand il est défilé en vue avec les variables suivantes:

  • tableview.contentoffset.y code> - le montant vertical par lequel l'origine de la vue de contenu est décalée à partir de l'origine de la vue de défilement em> li> li>
  • tableview.ContSantsize.Height code> - la hauteur de la vue de contenu em> li>
  • tableview.bounds.Size.Height code> - la hauteur des limites de la table em> li> ul>

    Si le contenu vertical décalé + la hauteur des limites de la table dépasse la hauteur de la taille du contenu de la table, nous pouvons supposer que le pied de page est maintenant en vue. P>

    Vous pouvez envelopper cela dans une instruction IF et l'utiliser pour envoyer une notification. Vous pouvez ensuite effectuer des tests supplémentaires pour que le pied de page s'étire de manière dynamique ou d'autres effets souhaités: p> xxx pré>

    Voici un petit extrait de code en action: P>

    // Set up an observer for changes in the table's contentOffset or contentSize.
    // This can be done during initialisation of the tableFooterView
    [tableView addObserver:self 
                forKeyPath:@"contentOffset" 
                   options:NSKeyValueObservingOptionNew
                   context:NULL];
    [tableView addObserver:self 
                forKeyPath:@"contentSize"
                   options:NSKeyValueObservingOptionNew
                   context:NULL];
    
    // Further down in code, listen for the changes:
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
      change:(NSDictionary *)change context:(void *)context {
        if ([keyPath isEqualToString:@"contentOffset"] || 
            [keyPath isEqualToString:@"contentSize"]) {
    
            if((tableView.contentOffset.y + tableView.bounds.size.height) > tableView.contentSize.height){
                // the tableFooterView should now be in view
                [[NSNotificationCenter defaultCenter] 
                    postNotificationName:@"scrollToLoadNeedsLoad"
                                  object:self];
                // dynamically change the footer here (ideal for making it stretch with the table)
            }
    
        }
    }
    


1 commentaires

Overkill. Déclencher une charge paresseuse ou tout ce que vous voulez lorsque la dernière cellule de la vision est demandée est la voie à suivre.



-1
votes

réponse simple: xxx


1 commentaires

Ceci est appelé lorsque la vue Section Footer sera affichée; La question portait sur le Tablefooterview .