2012-03-02 25 views
8

¿Cuál es la forma más precisa de obtener el título o índice de la sección más alta en UITableView? No me refiero a la sección en el índice 0, sino al encabezado de sección que actualmente está anclado en la parte superior mientras se desplaza.Obtenga la sección actual de UITableView

Respuesta

13

Puede obtener la sección en la parte superior de la pantalla, así:

 NSUInteger sectionNumber = [[tableView indexPathForCell:[[tableView visibleCells] objectAtIndex:0]] section]; 

embargo, este método puede no ser óptima para usted porque va a obtener el número será raro cuando está en el período de transición entre dos encabezados. Siempre y cuando no necesites conocer la sección durante la transición, estarás bien. Espero que esto es lo que está buscando,

+0

¿Qué método debería poner esto en mantener la corriente sectionNumber? – Bot

+0

Scrollviewdidscroll si desea que se actualice cada vez que el usuario se desplaza –

+1

Brilliant, gracias! – devios1

-1

Haga que su clase implemente el UIScrollViewDelegate e implemente las siguientes funciones. Asegurará que recupere la sección solo cuando la vista de tabla deje de desplazarse.

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate 
{ 
    if (!decelerate) 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
    } 
} 

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{ 
     // retrieve section here 
     section = [[[self.tableview visibleCells] objectAtIndex:0] section]; 
} 
+0

Supongo que al hacerlo de esta manera, evita que las secciones se confundan cuando están en transición. – Bot

+0

Esto arroja errores con mi celda personalizada por algún motivo ... '- [Sección Cita Cita Personalizada]: selector no reconocido enviado a la instancia 0x89af850'. Todo lo que hago es NSLogging la sección en el código anterior que proporcionó. – Bot

+0

Esto es antiguo pero está todo mal porque 'self.tableView visibleCells' da' UITableViewCells' y no 'IndexPaths'. Después de obtener indexPaths, podemos hacer indexPaths [0] .section. – esh

3

creo que en lugar de consultar a los visibleCells, es mejor preguntar por las sendas del índice de la siguiente manera:

NSInteger section = [[[self.tableView indexPathsForVisibleRows] firstObject] section]; 

Puede utilizar este código en uno de los métodos UIScrollViewDelegate de acuerdo a su necesariamente.

1

versión Swift

Uso primera (cubrió actual) o última (se muestra la última)

if let section:Int = tableView.indexPathsForVisibleRows?.last?.section { 

     tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: section), atScrollPosition: UITableViewScrollPosition.None, animated: true) 

    } 
Cuestiones relacionadas