refreshcontrol uitableview ios6 uirefreshcontrol

uitableview - refreshcontrol - swiperefreshlayout swift



UIRefreshControl en la parte inferior de la UITableView iOS6? (6)

Creo que no habrá una solución simple a este problema. Puede ser que alguien pueda escribir una biblioteca por separado para implementar este comportamiento, además de que causará más complicaciones una vez que guarde los datos en la tabla.

Pero analicemos el problema y eso podría ayudarlo a lograr lo que desea. He usado el siguiente código para agregar más filas en la aplicación:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height; if (endScrolling >= scrollView.contentSize.height) { NSLog(@"Scroll End Called"); [self fetchMoreEntries]; } }

O podrías hacer algo como eso:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView { if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) { if (!self.isMoreData) { self.MoreData = YES; // call some method that handles more rows } } }

Debe haber visto tales métodos en muchas preguntas como he descrito anteriormente y ciertamente no es lo que ha pedido. Pero lo que puede hacer es que mientras el código anterior esté en proceso para cargar más datos, puede agregar una subvista y mostrar un par de imágenes similares a las que ofrece UIRefreshControl. Agregue las imágenes en la subvista para que se muestren como un progreso hasta que se ejecute el código anterior. Inicio esto ayuda.

Por cierto, le sugiero que no haga eso, ya que solo perderá su tiempo para hacer algo tan pequeño a menos que lo esté haciendo con fines de aprendizaje.

¿Es posible agregar UIRefreshControl en la parte inferior de UITableView ? Lo usaría para cargar más datos. Por favor, ¿alguna sugerencia?


En realidad, el marco libre de TableView de Sensible proporciona esta funcionalidad lista para usar. Usted especifica el número de lote y automáticamente buscará los datos, mostrando la última celda como una celda de "cargar más". Una vez que haga clic en esa celda, cargará automáticamente el siguiente lote, y así sucesivamente. Vale la pena echarle un vistazo.


La siguiente respuesta está en Xcode 8 y Swift 3.

primero declarar

var spinner = UIActivityIndicatorView()

que en el método viewDidLoad escribe el siguiente código:

spinner = UIActivityIndicatorView(activityIndicatorStyle: .whiteLarge) spinner.stopAnimating() spinner.hidesWhenStopped = true spinner.frame = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: 60) tableView.tableFooterView = spinner

ahora finalmente override el método de delegado scrollViewDidEndDragging con lo siguiente:

override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) { let offset = scrollView.contentOffset let bounds = scrollView.bounds let size = scrollView.contentSize let inset = scrollView.contentInset let y = offset.y + bounds.size.height - inset.bottom let h = size.height let reloadDistance = CGFloat(30.0) if y > h + reloadDistance { print("fetch more data") spinner.startAnimating() } }


Me he quedado atrapado en el mismo problema recientemente y escribo una categoría para la clase UIScrollView. Aquí está CCBottomRefreshControl .


Para UITableView sugiero el siguiente enfoque:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { // if this is the last row that we have in local data // and we didn''t reach the total count of rows from the server side if (count == indexPath.row+1 && count < total) { // .. fetch more rows and reload table when data comes } }

No usé los métodos de vista de desplazamiento intencionalmente porque la vista de desplazamiento es lenta. Sucede que la vista de desplazamiento se desplaza, solicitamos más datos, actualizamos más filas y la vista de desplazamiento aún no ha terminado con el desplazamiento, sigue desacelerándose y causando problemas para obtener más datos.


Puede usar UIView para personalizar su refreshControl en la parte inferior. Cree UIView y agréguelo a UITableView como footerView.

UIView* footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)]; [footerView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"refreshImage.png"]]]; tableView.tableFooterView = footerView;

Hide it: tableView.tableFooterView.hidden = YES;

Implementar delegado UIScrollView -

(void)scrollViewDidScroll:(UIScrollView *)scrollView { if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) { tableView.tableFooterView.hidden = NO; // call method to add data to tableView } }

antes de agregar datos a tableView save current offset por CGPoint offset = tableView.contentOffset;

call reloadData luego establece offset previamente guardado de nuevo a tableView [tableView setContentOffset:offset animated:NO];

Para que pueda sentir nuevos datos agregados en la parte inferior.