4 Stimmen

EGORefreshTableHeaderView programmatisch zur Aktualisierung zwingen

Ich versuche, die EGORefreshTableHeaderView aus dem Code zu aktualisieren. Wenn ich nach unten ziehen alles funktioniert perfekt und die TableView (Root) wird aufgefrischt. Aber ich habe eine modale Ansicht, wo der Benutzer bestimmte Entitäten abonnieren kann. Wenn er eine Entität abonniert, wird die Reload-Methode in der ersten (Root) Tabellenansicht ausgelöst. Diese Methode stellt eine Verbindung zu einem Server her, lädt einige spezifische Daten auf der Grundlage des Abonnements und speichert sie in einer CoreData DB und aktualisiert die TableView (Wurzel).

Das Problem ist, dass der Download, der in einem eigenen Thread verarbeitet wird, mehrere Sekunden dauern kann, wenn der Nutzer nur mit einem 3G- oder Edge-Netz verbunden ist. Um den Benutzer darauf hinzuweisen, dass etwas passiert, würde ich gerne die EGORefreshTableHeaderView .

Ich habe herausgefunden, dass ich den Einzug der Aktualisierungsansicht festlegen und das Ladesymbol manuell anzeigen kann, aber ich habe mich gefragt, ob es nicht eine einfachere Lösung gibt, indem ich einfach einen Delegaten oder eine Methode auf der EGORefreshTableHeaderView ?

9voto

Reuven Punkte 2142

Haben Sie versucht, mit egoRefreshScrollViewDataSourceStartManualLoading ?

Angenommen, Ihr EGORefreshTableHeaderView Instanz _refreshTableHeaderView genannt wird, dann ist ein Aufruf wie:

[_refreshTableHeaderView egoRefreshScrollViewDataSourceStartManualLoading:self.tableView];

funktioniert für mich...


Es ist zu lange her, dass ich das benutzt habe, und ich habe vergessen, dass ich die Änderung selbst vorgenommen habe...

I geändert EGORefreshTableHeaderDelegate (erklärt in EGORefreshTableHeaderView.h ), um dieses zusätzliche Protokoll hinzuzufügen:

- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView;

Und die Umsetzung (in EGORefreshTableHeaderView.m ):

- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView {
    [self setState:EGOOPullRefreshLoading];

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.2];
    scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f);
    [UIView commitAnimations];

    if ([_delegate respondsToSelector:@selector(egoRefreshTableHeaderDidTriggerRefresh:)]) {
        [_delegate egoRefreshTableHeaderDidTriggerRefresh:self];
    }
}

Lassen Sie es mich wissen, wenn Sie weitere Hilfe benötigen.

(Und Dankeschön enormego für die großartige Arbeit!)

1voto

Chris Punkte 3037

Dank Reuven und seinem Code habe ich es ein wenig verbessert, so dass es auch in einer UIScrollView, die größer als der Bildschirm ist, verwendet werden kann. Außerdem habe ich das veraltete commitAnimations um Animationen zu blockieren.

#pragma mark - Manually refresh view update
- (void)egoRefreshScrollViewDataSourceStartManualLoading:(UIScrollView *)scrollView {
    [self.refreshHeaderView setState:EGOOPullRefreshLoading];

    //animating pull down scroll view
    [UIView animateWithDuration:0.2
                     animations:^{ 
                         scrollView.contentInset = UIEdgeInsetsMake(60.0f, 0.0f, 0.0f, 0.0f); 
                         scrollView.contentOffset = CGPointMake(0, -60.0f);
                     }
     ];

    //triggering refreshview regular refresh
    if ([self.tableView.delegate respondsToSelector:@selector(egoRefreshTableHeaderDidTriggerRefresh:)]) {
        [self egoRefreshTableHeaderDidTriggerRefresh:self.refreshHeaderView];
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X