Pergunta

A resposta para isso provavelmente está bem embaixo do meu nariz, mas não estou vendo. Talvez alguém aqui possa ajudar.

Eu tenho um scrollView que permite rolagem vertical. Eu organizei isso:

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

Eu tenho os seguintes métodos incluídos no mesmo arquivo, a fim de apoiar o protocolo 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");
}

Além disso, o arquivo .h para minha aula inclui o protocolo:

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

O problema é que, não importa o quê, os dois a seguir nunca são chamados:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Os outros dois métodos são chamados em resposta a diferentes eventos. Dado que dois dos métodos de protocolo estão sendo chamados, presumo que eu defini corretamente o delegado para mim. Então qual é o problema?

Obrigado!

Atualização: encontrei o problema, embora ainda não tenha descoberto como resolvê -lo. Minha classe abrange dois arquivos. No segundo arquivo, um scrollView diferente está implementando -ScrollViewDidendDeCelerating -ScrollViewDidScroll

A questão é: como posso definir dois conjuntos diferentes de métodos para duas assistências diferentes, na mesma classe?

Eu poderia tentar lidar com duas visualizações de scroll com os mesmos métodos de delegados, mas isso é feio, pois não poderei manter cada conjunto de delegados com o arquivo do ScrollView. Eu também poderia dividir minha classe. Existe outra maneira?

Foi útil?

Solução

A questão é: como posso definir dois conjuntos diferentes de métodos para duas assistências diferentes, na mesma classe?

Os métodos delegados aceitam os objetos ScrollView como seu parâmetro. Você precisa verificar qual scrollView está sendo aprovado e responder de acordo. Você pode definir a propriedade de tag de cada scrollView para identificá -los.

Outras dicas

Você só precisa comparar os ponteiros com o que é passado para os métodos

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

Isso supõe que suas visitas de rolagem sejam propriedades da classe. Tenho certeza de que uma comparação de ponteiro está bem aqui. Se isso lhe dar problemas, use algo como

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

Você precisará atribuir uma tag quando os criar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top