2011-07-21 11 views
9

Estoy tratando de detectar si el usuario se ha desplazado hasta la parte inferior de una UITableView para poder hacer algunas cosas adicionales. Para calcular las cosas correctamente, necesito obtener el rect visible de UITableView. ¿Cómo puedo conseguir esto?¿Cómo puedo obtener una rect visible de UITableView?

- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ 

    [_refreshHeaderView egoRefreshScrollViewDidScroll:scrollView]; 

    int currentMaxPosition = CGRectGetMaxY([self.tableView visibleRect]); 
    int currentMinPosition = CGRectGetMinY([self.tableView visibleRect]); 

    int tableViewBottom = [self.tableView bounds].size.height - 100; 
    int tableViewTop = 0; 

    //get older messages once we're near the bottom 
    if (currentMaxPosition > tableViewBottom - 100) 
    { 
     NSLog(@"WE AT THE BOTTOM!"); 
    }  

} 

Respuesta

2

Usted puede comprobar en [tableView visibleCells] para conseguir la celda visible o en tableView indexPathsForVisibleRows] y determinar si el usuario desplaza a la parte inferior.

+0

Basado en la célula visible, ¿cómo puedo determinar si el usuario está en la parte inferior? –

+0

use '- (NSArray *) indexPathsForVisibleRows' para obtener rutas de índice para estas filas –

0
-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ 

     int i=0; 

     i=indexPath.row; 

     int count=[urTablearray count]; 

     if (count == (++i)) { 

       //do ur stuff here 

     } 


    } 
+0

que el código no compila, no puede modificar un atributo de solo lectura como indexPath.row. –

+0

echa un vistazo ahora ... –

+0

es que funcionó o no –

0

Si desea cargar más células cuando llegue al fondo, intente esto post.

Básicamente, usted sabe cuántas filas se encuentran actualmente en la vista de tabla, el número de secciones, etc., de uso:

- (NSInteger)numberOfSections 

- (NSInteger)numberOfRowsInSection:(NSInteger)section 

También es posible usar:

- (NSArray *)indexPathsForVisibleRows 

de averiguar los caminos de índice de las células cerca de la parte inferior ..

continuación, utilizar el método de UITableViewDelegate siguiente:

- (void)tableView:(UITableView *)tableView 
    willDisplayCell:(UITableViewCell *)cell 
forRowAtIndexPath:(NSIndexPath *)indexPath 

y utilice el valor indexPath y compárelo con "cerca" de los índices inferiores. Si está cerca de la parte inferior, realice alguna acción, como cargar más contenido.

Algunas aplicaciones tienen una celda dedicada "Cargar más ..." al manually load additional content. Este enfoque es más fácil de poner en marcha y valida la funcionalidad de "cargar más contenido" en su aplicación.

18

A UITableView es solo una subclase UIScrollView, por lo que se aplican todos los métodos habituales de UIScrollView, p. el rect visible de un UITableView es simplemente sus límites:

CGRect visibleRect = [myTableView bounds]; 

El origen de la visibleRect es simplemente el contentOffset, por lo que otro método que puede utilizar es:

CGFloat distanceFromBottom = [self.tableView contentSize].height - [self.tableView contentOffset].y; 
+0

la distancia desde abajo es siempre 0 cuando lo imprimo –

+0

Exactamente lo que estaba buscando, gracias! –

+0

Excelente. '- [UITableView bounds]' es perfecto si por alguna razón uno necesita el rect visible de la tabla pero no su longitud completa (que incluiría filas invisibles) content rect (en cuyo caso use '- [UITableView frame]'). –

2

yo estaba tratando de mostrar una imagen cuando hice tapping en una celda, y quería encontrar el marco para mostrarlo (obtener la posición actual de la tabla).

que utilizó la siguiente y funcionó:

//originalImageViewFrame is the CGRect that I use for my new view that I want to add to the view. 
    originalImageViewFrame.origin = CGPointZero; 
    originalImageViewFrame.size = self.tableView.contentSize; 

espero que ayudó.

Cuestiones relacionadas