Question

La réponse à cela est probablement juste sous mon nez, mais je ne le vois pas. Peut-être que quelqu'un ici pourrait aider.

J'ai un ScrollView qui permet un défilement vertical. Je l'ai mis en place:

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

J'ai les méthodes suivantes incluses dans le même fichier, afin de prendre en charge le protocole UiscrollViewDelegate:

- (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");
}

De plus, le fichier .h pour ma classe comprend le protocole:

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

Le problème est que quoi qu'il arrive, les deux suivants ne sont jamais appelés:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Les deux autres méthodes sont appelées en réponse à différents événements. Étant donné que deux des méthodes de protocole sont appelées, je suppose que j'ai correctement défini le délégué sur moi-même. Alors quel est le problème?

Merci!

MISE À JOUR: J'ai trouvé le problème, mais je n'ai pas encore compris comment le résoudre. Ma classe s'étend sur deux fichiers. Dans le deuxième fichier, un autre ScrollView implémente -scrollViewDidendDelenerating -ScrollViewDidscroll

La question est de savoir comment puis-je définir deux ensembles différents de méthodes pour deux uiscrollviews différents, dans la même classe?

Je pourrais essayer de gérer deux ScrollViews avec les mêmes méthodes de délégué, mais c'est laid car je ne pourrai pas garder chaque ensemble de délégués avec le fichier de ScrollView. Je pourrais aussi diviser ma classe. Y a-t-il une autre façon?

Était-ce utile?

La solution

La question est de savoir comment puis-je définir deux ensembles différents de méthodes pour deux uiscrollviews différents, dans la même classe?

Les méthodes du délégué acceptent un ScrollView objets comme paramètre. Vous devez vérifier quel ScrollView est passé et répondre en conséquence. Vous pouvez définir chaque propriété TAG de ScrollView afin de les identifier.

Autres conseils

Il vous suffit de comparer les pointeurs avec ce qui est passé dans les méthodes

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

Cela suppose que vos parcouris sont des propriétés de la classe. Je suis à peu près sûr qu'une comparaison de pointeur va bien ici. Si cela vous donne du mal à utiliser quelque chose comme

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

Vous devrez leur attribuer une balise lorsque vous les créez

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top