Pregunta

La respuesta a esto probablemente esté justo debajo de mi nariz, pero no la estoy viendo. Tal vez alguien aquí podría ayudar.

Tengo una vista de desplazamiento que permite el desplazamiento vertical. Yo lo instalé:

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

Tengo los siguientes métodos incluidos en el mismo archivo, para admitir el 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");
}

Además, el archivo .h para mi clase incluye el protocolo:

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

El problema es que pase lo que pase, los siguientes dos nunca se llaman:

    -scrollViewDidEndDecelerating
    -scrollViewDidScroll

Los otros dos métodos se llaman en respuesta a diferentes eventos. Dado que se llaman dos de los métodos de protocolo, supongo que he establecido correctamente el delegado en mi yo. ¿Entonces, cuál es el problema?

¡Gracias!

ACTUALIZACIÓN: Encontré el problema, aunque todavía no he descubierto cómo resolverlo. Mi clase abarca dos archivos. En el segundo archivo, un ScrollView diferente está implementando -ScrollViewDidendDecelerating -ScrollViewDidScroll

La pregunta es, ¿cómo puedo definir dos conjuntos diferentes de métodos para dos UIScrollviews diferentes, en la misma clase?

Podría intentar manejar dos vistas de desplazamiento con los mismos métodos de delegado, pero eso es feo ya que no podré mantener cada conjunto de delegados con el archivo de ScrollView. También podría dividir mi clase. ¿Hay otra manera?

¿Fue útil?

Solución

La pregunta es, ¿cómo puedo definir dos conjuntos diferentes de métodos para dos UIScrollviews diferentes, en la misma clase?

Los métodos delegados aceptan los objetos de ScrollView como su parámetro. Debe verificar qué ScrollView se está aprobando y responder en consecuencia. Puede configurar cada propiedad de etiqueta de ScrollView para identificarlos.

Otros consejos

Solo necesita comparar los punteros con lo que se pasa a los métodos

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

Esto supone que sus vistas de desplazamiento son propiedades en la clase. Estoy bastante seguro de que una comparación de puntero está bien aquí. Si te da problemas, usa algo como

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

Deberá asignarles una etiqueta cuando las cree

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top