Cuando una tabla tiene muchas filas, el usuario puede desplazar hacia arriba o hacia abajo la tabla. Esto crea una animación de desplazamiento que parece tener una longitud determinista dependiendo de la velocidad/duración del gesto de flick. ¿Es posible calcular de manera confiable qué filas de la tabla serán visibles una vez que el desplazamiento se detenga si no hay más interacción del usuario?Calcular en qué fila dejará de desplazarse UITableView?
Respuesta
En iOS 5.0 y posterior hay una API nueva para UIScrollViewDelegate llamada scrollViewWillEndDragging:withVelocity:targetContentOffset:. Con este nuevo método, la posición de parada del desplazamiento puede calcularse e incluso modificarse, como se explica en el Video Session 100: What's New in Cocoa Touch, alrededor del noveno minuto.
No sé cómo se podría determinar cuántas filas se mostrarán, pero siempre se puede obtener cuántas filas HAN mostrado. (. Una vez que la mesa se detiene w/no más tocar) No estoy seguro si eso ayuda, pero esta es la forma en que lo haría
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// make sure to declare your integer in your .h file and to also synthesize
//say this is your int "howManyRowsAreShowing"
howManyRowsAreShowing = indexPath.Row;
//the rest of the code below is generic table view code for example only
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
// Set up the cell...
NSString *cellValue = [listOfItems objectAtIndex:indexPath.row];
cell.text = cellValue;
return cell;
}
Interesante pregunta ..... UITableViewDelegate
se ajusta a UIScrollViewDelegate
así: http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollViewDelegate_Protocol/Reference/UIScrollViewDelegate.html#//apple_ref/occ/intf/UIScrollViewDelegate
Existen algunas retrollamadas de delegado que puede usar para saber cuándo el desplazamiento comienza a desacelerarse y termina desacelerándose.
Probablemente pueda usar – scrollViewDidEndDecelerating:
y en ese punto use las alturas de celda y la propiedad de compensación de contenido de tableView (subclases tableView UIScrollView
) y luego calcule las celdas que son visibles después de la deceleración.
UITableView
hereda de UIScrollView
y que puede lograr que al utilizar los métodos y UIScrollViewDelegate
la propiedad de tabla vista indexPathsForVisibleRows
para comprobar qué índice de células caminos son visibles en este momento se detiene el desplazamiento.
Incluso puede guardar la posición inicial desde donde comenzó la desaceleración, para que pueda calcular si la dirección de desplazamiento fue hacia arriba o hacia abajo, lo que le permitirá saber si la celda que detendrá es la primera o la último de los visibles.
int startDeceleratingPosition;
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
startDeceleratingPosition = scrollView.contentOffset.y;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
BOOL isPositionUp = startDeceleratingPosition < scrollView.contentOffset.y;
NSArray *paths = [_myTableview indexPathsForVisibleRows];
UITableViewCell *cell;
if(isPositionUp){
cell = [_myTableview cellForRowAtIndexPath:[paths objectAtIndex:0]];
} else {
cell = [_myTableview cellForRowAtIndexPath:[paths lastObject]];
}
}
Una nota importante sobre el código anterior es que apunta a la vista de tabla como una variable _myTableview
en lugar de limitarte a enviar la variable método delegado scrollView
a un UITableView *
, aunque eso es sólo los detalles de implementación y no debe afectar la lógica aquí.
Ah, si solo hubiera un método para obtener la velocidad del desplazamiento ... –
Pero hay una manera ... UIScrollView tiene una propiedad decelerationRate, que sería solo un enfoque de bajo nivel para eso, y también con un muchas más oportunidades de obtener un resultado incorrecto. http://developer.apple.com/library/ios/#documentation/uikit/reference/UIScrollView_Class/Reference/UIScrollView.html#//apple_ref/doc/uid/TP40006922-CH3-DontLinkElementID_2 –
La tasa de desaceleración es solo una constante como la gravedad Necesitas saber la velocidad de desplazamiento actual para hacer más cálculos sobre cuándo y dónde se detendrá el desplazamiento, y no veo ninguna forma de obtener la velocidad de desplazamiento a través de la API pública. –
- 1. UITableView: ¿qué fila fue seleccionada?
- 2. UITableView desplazarse a la posición específica
- 3. iPhone UITableView Agregue contenido en la parte superior sin desplazarse
- 4. Deshabilitar rebotes verticales de UITableView al desplazarse
- 5. iPhone + + UITableView fila altura
- 6. Cargue todas las celdas en UITableView antes de desplazarse
- 7. UITableView reloadRowsAtIndexPaths oculta la fila
- 8. Cómo resaltar una fila en una UITableView
- 9. ¿Cómo puedo hacer que una UITableView deje de desplazarse
- 10. UITableView Sección Pie de página se superpone al desplazarse
- 11. Agrupaciones de animación de fila UITableView agrupadas
- 12. Cómo desplazarse a la última fila en una JTable
- 13. Calcular fila significa el subconjunto de columnas
- 14. Detectar la celda superior corriente en un UITableView después de desplazarse
- 15. guardar la fila seleccionada en UITableView después de reloadData
- 16. ¿Cómo borrar una fila en UITableView de forma manual?
- 17. Creación de celdas personalizadas en la fila estática UITableView
- 18. Seleccionar fila mientras UITableView está en modo de edición
- 19. cómo obtener el título de la fila seleccionada en UITableview
- 20. Cómo seleccionar mediante programación una fila en UITableView en MonoTouch?
- 21. Zend_HTTP_Client no me dejará PUBLICAR ningún dato
- 22. Mejores prácticas para dibujar alturas de fila de UITableView dinámicas
- 23. Barra de desplazamiento personalizada UITableView
- 24. widget de Javascript inspirado en iPhone UITableView?
- 25. UITableViewCell y UITableView (seleccionó una fila) navegación a otro Viewcontroller
- 26. UITableView no mantiene la fila seleccionada al devolver
- 27. Añadir fila adicional a un UITableView gestionado por NSFetchedResultsController
- 28. prepareForSegue no se llamó cuando se seleccionó la fila UITableView?
- 29. ¿Se puede recibir una notificación cuando un UITableView termine de desplazarse?
- 30. ¿Qué pasa con [UITableView reloadData]?
Buena pregunta, pero por lo que he podido decir ... no, parece que sería una operación compleja de mantener. –