ios - refreshcontrol react native
¿Cómo “oculto” un UIRefreshControl? (10)
A continuación se detalla lo mejor para implementar UIRefreshControl.
-(void)addRefreshControll{
self.refreshControl=[[UIRefreshControl alloc] init];
self.refreshControl.tintColor=[UIColor colorWithRed:0 green:183.0/255.0 blue:213/255.0 alpha:1.0];
self.refreshControl.attributedTitle = [[NSAttributedString alloc]initWithString:@"Loading history..."];
[self.refreshControl addTarget:self action:@selector(loadMoreChatFromCoreData) forControlEvents:UIControlEventValueChanged];
self.tableView.refreshControl = self.refreshControl;
}
Cuando no haya más registro para cargar, elimine refreshControl por debajo de la línea
self.tableView.refreshControl = nil;
He implementado la misma multa de trabajo.
Ocasionalmente, mi vista de tabla no estará conectada a un servicio para actualizar, y en ese caso, no quiero que esté presente el UIRefreshControl.
Después de agregarlo en viewDidLoad, he intentado ocultarlo bajo ciertas circunstancias con setEnabled:
y setHidden:
pero ninguno parece funcionar.
Hay una solución muy simple que puedes probar: [self.refreshControl removeFromSuperview];
Intente establecer la propiedad refreshControl
su controlador de vista de refreshControl
en nil.
Lo resolví de esta manera:
-(void)updateUIWithAuthState:(BOOL)isAuthenticated {
self.loginButton.enabled = !isAuthenticated;
self.loginButton.tintColor = isAuthenticated ? [UIColor clearColor] : nil;
self.logoutButton.enabled = isAuthenticated;
self.logoutButton.tintColor = isAuthenticated ? nil : [UIColor clearColor];
self.tableView.userInteractionEnabled = isAuthenticated;
self.data = nil;
[self.tableView reloadData];
}
No puede eliminar el UIRefreshControl usando setEnabled:NO
, por lo tanto, debe eliminarlo de su supervisión. He probado una muestra usando la clase de Alcance proporcionada por Apple.
Para agregar UIRefreshControl puedes usar esto:
UIRefreshControl *refContr=[[UIRefreshControl alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[refContr setTintColor:[UIColor blueColor]];
[refContr setBackgroundColor:[UIColor greenColor]];
[self.view addSubview:refContr];
[refContr setAutoresizingMask:(UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleLeftMargin)];
[refContr addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
Luego se implementó la notificación de la clase de accesibilidad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
Puedes hacerlo usando bool flag para verificar la conectividad. Aquí estoy proporcionando este ejemplo usando la clase de accesibilidad de Apple para verificar mi conectividad.
switch (netStatus)
{
case NotReachable: {
for (UIRefreshControl *subView in [myView subviews]) {
if ([subview isKindOfClass:[UIRefreshControl class]]) {
[subView removeFromSuperview];
}
}
//or you could use [UIRefreshControl setHidden:YES];
connectionRequired = YES;
break;
}
case ReachableViaWiFi: {
for (UIRefreshControl *subView in [myView subviews]) {
if ([subview isKindOfClass:[UIRefreshControl class]]) {
[subview removeFromSuperview];
}else{
[self.view addSubview:refContr];
}
//or you could use [UIRefreshControl setHidden:NO];
break;
}
}
Espero que esto funcione para usted.
Para ocultar el control de actualización y evitar la advertencia Solo use
C objetivo
[self.refreshControl removeFromSuperview];
Rápido
self.refreshControl.removeFromSuperview()
Prueba esto:
[self.refreshControl removeFromSuperview];
self.refreshControl = nil;
Tienes varias formas de hacer esto. Creo que la mejor manera es hacer una comprobación en el método viewDidLoad con:
if (condition){
//attach refreshControl
}
si esto no es posible, la mejor manera es colocar este código donde desee ocultar la actualización (creo que en el método viewWillAppear en condición if)
//End refresh control
[self.refreshControl endRefreshing];
//Remove refresh control to superview
[self.refreshControl removeFromSuperview];
Una pregunta antigua, pero estaba buscando una respuesta y nada funcionó exactamente como quería.
Esto es lo que funcionó para mí:
Swift 4
func createRefreshControl() {
refreshControl = UIRefreshControl()
refreshControl?.addTarget(self, action: #selector(self.myTableRefreshFunction), for: UIControlEvents.valueChanged)
refreshControl?.tintColor = UIColor.white
refreshControl?.endRefreshing()
}
func removeRefreshControl() {
refreshControl?.removeTarget(self, action: #selector(self.myTableRefreshFunction), for: UIControlEvents.valueChanged)
refreshControl = nil
}
Llamo a createRefreshControl () cuando quiero que se cree el control, y eliminoRefreshControl cuando quiero que se elimine.
Tuve que eliminar el mismo objetivo que inicialmente agregué al control de actualización, de lo contrario, se actualizaría una vez antes de que realmente se eliminara (como una pistola con una bala en la cámara o un inodoro después de apagar el agua)
[refreshControl setTintColor:[UIColor clearColor]];
También puedes hacer algo como esto:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if (scrollView.contentOffset.y < 0)
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x, 0);
}