Domanda

La risposta a questo è probabilmente proprio sotto il mio naso, ma non lo vedo. Forse qualcuno qui potrebbe aiutare.

Ho uno scrollview che consente lo scorrimento verticale. L'ho organizzato:

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

Ho i seguenti metodi inclusi nello stesso file, al fine di supportare il protocollo 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");
}

Inoltre, il file .h per la mia classe include il protocollo:

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

Il problema è che, non importa cosa, i seguenti due non vengono mai chiamati:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Gli altri due metodi vengono chiamati in risposta a eventi diversi. Dato che vengono chiamati due dei metodi di protocollo, suppongo di aver correttamente impostato il delegato su me stesso. Quindi qual'è il problema?

Grazie!

Aggiornamento: ho trovato il problema, anche se non ho ancora capito come risolverlo. La mia classe copre due file. Nel secondo file, un diverso ScrollView sta implementando -SCrollViewDidendDecelerating -SCrollViewDidScroll

La domanda è: come posso definire due diversi set di metodi per due diversi uiscrollviews, nella stessa classe?

Potrei provare a gestire due scrollviews con gli stessi metodi delegati, ma questo è brutto poiché non sarò in grado di conservare ogni set di delegati con il file di Scrollview. Potrei anche dividere la mia classe. C'è un altro modo?

È stato utile?

Soluzione

La domanda è: come posso definire due diversi set di metodi per due diversi uiscrollviews, nella stessa classe?

I metodi delegati accettano un oggetto ScrollView come parametro. È necessario verificare quale ScrollView viene superato e rispondere di conseguenza. È possibile impostare la proprietà Tag di ogni ScrollView per identificarli.

Altri suggerimenti

Devi solo confrontare i puntatori con ciò che viene passato nei metodi

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

Ciò presuppone che i tuoi scrollviews siano proprietà della classe. Sono abbastanza sicuro che un confronto puntatore vada bene qui. Se ti dà problemi a usare qualcosa di simile

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

Dovrai assegnare loro un tag quando li crei

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top