Frage

Die Antwort darauf ist wahrscheinlich direkt unter meiner Nase, aber ich sehe es nicht. Vielleicht könnte jemand hier helfen.

Ich habe eine Scrollview, die vertikales Scrollen ermöglicht. Ich habe es aufgesetzt:

[clefScrollView addSubview:clefView];
[clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];
clefScrollView.showsVerticalScrollIndicator = YES;
clefScrollView.showsHorizontalScrollIndicator = NO;
clefScrollView.delegate = self;

Ich habe die folgenden Methoden in derselben Datei, um das UiscrollViewDelegate -Protokoll zu unterstützen:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    NSLog(@"%f %f", scrollView.contentOffset.y, scrollView.contentSize.height);
}

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidEndDecelerating");
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidEndScrollingAnimation");
}

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidScroll");
}

Darüber hinaus enthält die .H -Datei für meine Klasse das Protokoll:

@interface ClefNotesViewController : UIViewController <UIActionSheetDelegate,UIScrollViewDelegate,DoneWithVCDelegate> {

Das Problem ist, dass die folgenden beiden niemals aufgerufen werden:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Die anderen beiden Methoden werden als Reaktion auf verschiedene Ereignisse aufgerufen. Angesichts der Tatsache, dass zwei der Protokollmethoden aufgerufen werden, gehe ich davon aus, dass ich den Delegierten richtig auf mich selbst eingestellt habe. Was ist also das Problem?

Vielen Dank!

UPDATE: Ich habe das Problem gefunden, obwohl ich noch nicht herausgefunden habe, wie man es behebt. Meine Klasse umfasst zwei Dateien. In der zweiten Datei implementiert eine andere ScrollView -ScrollViewDidendDecelerating -scrollViewDidScroll

Die Frage ist, wie ich zwei verschiedene Methodensätze für zwei verschiedene Uiscrollviews in derselben Klasse definieren kann.

Ich könnte versuchen, zwei Scrollviews mit denselben Delegiertenmethoden zu verarbeiten, aber das ist hässlich, da ich nicht in der Lage sein kann, jeden Delegierten mit der Datei des Scrollviews zu halten. Ich könnte auch meine Klasse teilen. Gibt es eine andere Art und Weise?

War es hilfreich?

Lösung

Die Frage ist, wie ich zwei verschiedene Methodensätze für zwei verschiedene Uiscrollviews in derselben Klasse definieren kann.

Die Delegierten -Methoden akzeptieren ein ScrollView -Objekt als Parameter. Sie müssen überprüfen, welche Scrollview übergeben wird, und reagieren entsprechend. Sie können die Tag -Eigenschaft der ScrollView festlegen, um sie zu identifizieren.

Andere Tipps

Sie müssen nur die Zeiger mit dem vergleichen, was in die Methoden übergeben wird

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if(scrollView == self.firstScrollView){
          // do something
    }
    else if(scrollView == self.secondScrollView){
          // do something else
    }
}

Dies setzt voraus, dass Ihre Scrollviews Eigenschaften in der Klasse sind. Ich bin mir ziemlich sicher, dass hier ein Zeigervergleich in Ordnung ist. Wenn es Ihnen Probleme gibt, so etwas wie zu verwenden

if(scrollView.tag == self.firstScrollView.tag)

Sie müssen ihnen ein Tag zuweisen, wenn Sie sie erstellen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top