saber porcentaje poner modelos eliminar cómo cuál cuenta contraseña como bateria iphone uitableview scroll

porcentaje - Cómo saber cuándo UITableView se desplazó hacia abajo en iPhone



porcentaje bateria iphone ios 10 (16)

Actualización para Swift 3

La respuesta de Neoneye funcionó mejor para mí en Objective C, este es el equivalente de la respuesta en Swift 3:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { let offset: CGPoint = scrollView.contentOffset let bounds: CGRect = scrollView.bounds let size: CGSize = scrollView.contentSize let inset: UIEdgeInsets = scrollView.contentInset let y: CGFloat = offset.y + bounds.size.height - inset.bottom let h: CGFloat = size.height // print("offset: %f", offset.y) // print("content.height: %f", size.height) // print("bounds.height: %f", bounds.size.height) // print("inset.top: %f", inset.top) // print("inset.bottom: %f", inset.bottom) // print("position: %f of %f", y, h) let reloadDistance: CGFloat = 10 if (y > h + reloadDistance) { print("load more rows") } }

Me gustaría saber cuándo un UITableView hacia abajo para cargar y mostrar más contenido, algo así como un delegado o alguna otra cosa para que el controlador sepa cuándo la tabla se desplazó hacia abajo.

¿Alguien sabe esto? Por favor, ayúdenme, ¡gracias de antemano!


Aquí está el rápido código de la versión 3.0.

func scrollViewDidScroll(_ scrollView: UIScrollView) { let offset = scrollView.contentOffset let bounds = scrollView.bounds let size = scrollView.contentSize let inset = scrollView.contentInset let y: Float = Float(offset.y) + Float(bounds.size.height) + Float(inset.bottom) let height: Float = Float(size.height) let distance: Float = 10 if y > height + distance { // load more data } }


Basándome en la respuesta de @Jay Mayu, que sentí que era una de las mejores soluciones:

C objetivo

// UITableViewDelegate - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // Need to call the service & update the array if(indexPath.row + 1 == self.sourceArray.count) { DLog(@"Displayed the last row!"); } }

Swift 2.x

// UITableViewDelegate func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { if (indexPath.row + 1) == sourceArray.count { print("Displayed the last row!") } }


Generalmente uso esto para cargar más datos, cuando la última celda comienza a mostrar

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { if (indexPath.row == myDataArray.count-1) { NSLog(@"load more"); } }


La mejor manera es probar un punto en la parte inferior de la pantalla y usar esta llamada al método cuando el usuario se desplaza ( scrollViewDidScroll ):

- (NSIndexPath *)indexPathForRowAtPoint:(CGPoint)point

Pruebe un punto cerca de la parte inferior de la pantalla y luego use indexPath para comprobar si indexPath es la última fila y, en caso afirmativo, agregue filas.


Mi solución es agregar celdas antes de que la tabla vista desacelere en el desplazamiento estimado. Es predecible por velocidad.

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)offset { NSLog(@"offset: %f", offset->y+scrollView.frame.size.height); NSLog(@"Scroll view content size: %f", scrollView.contentSize.height); if (offset->y+scrollView.frame.size.height > scrollView.contentSize.height - 300) { NSLog(@"Load new rows when reaches 300px before end of content"); [[DataManager shared] fetchRecordsNextPage]; } }


Ninguna de las respuestas anteriores me ayudó, así que se me ocurrió esto:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)aScrollView { NSArray *visibleRows = [self.tableView visibleCells]; UITableViewCell *lastVisibleCell = [visibleRows lastObject]; NSIndexPath *path = [self.tableView indexPathForCell:lastVisibleCell]; if(path.section == lastSection && path.row == lastRow) { // Do something here } }


Quiero realizar alguna acción en mi 1 Tableviewcell completa.

Entonces el código es link the:

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSArray* cells = self.tableView.visibleCells; NSIndexPath *indexPath = nil ; for (int aIntCount = 0; aIntCount < [cells count]; aIntCount++) { UITableViewCell *cell = [cells objectAtIndex:aIntCount]; CGRect cellRect = [self.tableView convertRect:cell.frame toView:self.tableView.superview]; if (CGRectContainsRect(self.tableView.frame, cellRect)) { indexPath = [self.tableView indexPathForCell:cell]; // remain logic } } }

Que esto sea de ayuda para alguien.


Tomando neoneye excelentes respuestas pero en rápida, y cambio de nombre de las variables ..

Básicamente sabemos que hemos llegado al final de la vista de tabla si yOffsetAtBottom está más allá de la altura del contenido de la tabla.

func isTableViewScrolledToBottom() -> Bool { let tableHeight = tableView.bounds.size.height let contentHeight = tableView.contentSize.height let insetHeight = tableView.contentInset.bottom let yOffset = tableView.contentOffset.y let yOffsetAtBottom = yOffset + tableHeight - insetHeight return yOffsetAtBottom > contentHeight }



agregue este método en UITableViewDelegate :

-(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat height = scrollView.frame.size.height; CGFloat contentYoffset = scrollView.contentOffset.y; CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset; if(distanceFromBottom < height) { NSLog(@"end of the table"); } }


en Swift puedes hacer algo como esto. La siguiente condición será verdadera cada vez que llegue al final de la tabla vista

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { if indexPath.row+1 == postArray.count { println("came to last row") } }


en el delegado de la vista de tabla haga algo como esto

- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { CGPoint offset = aScrollView.contentOffset; CGRect bounds = aScrollView.bounds; CGSize size = aScrollView.contentSize; UIEdgeInsets inset = aScrollView.contentInset; float y = offset.y + bounds.size.height - inset.bottom; float h = size.height; // NSLog(@"offset: %f", offset.y); // NSLog(@"content.height: %f", size.height); // NSLog(@"bounds.height: %f", bounds.size.height); // NSLog(@"inset.top: %f", inset.top); // NSLog(@"inset.bottom: %f", inset.bottom); // NSLog(@"pos: %f of %f", y, h); float reload_distance = 10; if(y > h + reload_distance) { NSLog(@"load more rows"); } }


UITableView es una subclase de UIScrollView y UITableViewDelegate ajusta a UIScrollViewDelegate . Por lo tanto, el delegado que adjunte a la vista de tabla obtendrá eventos como scrollViewDidScroll: y puede llamar a métodos como contentOffset en la vista de tabla para encontrar la posición de desplazamiento.


Los neoneyes modificados responden un poco.

Esta respuesta se dirige a aquellos de ustedes que solo quieren que el evento se desencadene una vez por cada lanzamiento del dedo .

Adecuado para cargar más contenido de algún proveedor de contenido (servicio web, datos básicos, etc.). Tenga en cuenta que este enfoque no respeta el tiempo de respuesta de su servicio web.

- (void)scrollViewDidEndDragging:(UIScrollView *)aScrollView willDecelerate:(BOOL)decelerate { CGPoint offset = aScrollView.contentOffset; CGRect bounds = aScrollView.bounds; CGSize size = aScrollView.contentSize; UIEdgeInsets inset = aScrollView.contentInset; float y = offset.y + bounds.size.height - inset.bottom; float h = size.height; float reload_distance = 50; if(y > h + reload_distance) { NSLog(@"load more rows"); } }


NSLog(@"%f / %f",tableView.contentOffset.y, tableView.contentSize.height - tableView.frame.size.height); if (tableView.contentOffset.y == tableView.contentSize.height - tableView.frame.size.height) [self doSomething];

Agradable y simple