2013-05-23 6 views
0

Ive a juste posé cette question Run code on background and get return codeUIAlertView bizarre avec UIActivityIndicator

Et j'ai utilisé un UIAlertView avec indicateur d'activité tout en faisant la tâche de fond, le code final:

-(void)isConnectedToInternet:(void (^)(BOOL))block 
{ 
    palert = [[UIAlertView alloc]initWithTitle:@"Comprobando conexión a internet" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
    [palert show]; 

    if(palert != nil) { 
     UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

     indicator.center = CGPointMake(palert.bounds.size.width/2, palert.bounds.size.height-45); 
     [indicator startAnimating]; 
     [palert addSubview:indicator]; 
    } 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: 
            [NSURL URLWithString:@"http://www.google.com/"]]; 

    [request setHTTPMethod:@"HEAD"]; 

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
     NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
     if (block) { 
      [palert dismissWithClickedButtonIndex:0 animated:YES]; 
      block(([httpResponse statusCode] == 200) ? YES : NO); 
     } 
    }]; 

Son même code que réponse acceptée avec un UIAlertView, juste après cela im montrant un nouveau UIViewController qui fait une chose similaire sur ViewDidLoad.

alerta = [[UIAlertView alloc]initWithTitle:@"Descargando..." message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil]; 
[alerta show]; 

if(alerta != nil) { 
    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 

    indicator.center = CGPointMake(alerta.bounds.size.width/2, alerta.bounds.size.height-45); 
    [indicator startAnimating]; 
    [alerta addSubview:indicator]; 
} 

j'utilisais le même code pour montrer UIAlertView avec indicateur d'activité depuis longtemps, la première alertview pour la connexion Internet de contrôle montre bien, mais le second ne ...

Image

Je ne peux vraiment pas comprendre pourquoi le premier montre l'indicateur à l'intérieur d'alerView et le deuxième le montre en dehors de alertView si les deux ont exactement le même code.

Et cela ne se produit qu'après avoir ajouté un premier UIAlertView, avant d'ajouter que cela fonctionnait bien.

Im vraiment coincé sur ce que je ne peux pas trouver une solution.

Quelqu'un a une idée?

EDIT

solution Manière simple, je viens hardcode il.

Et oui, il semble que alert.frame n'est pas réglé, peut-être semblable à cette question: Question

indicator.center = CGPointMake(140, 70); 
+0

il suffit de définir le cadre de vue de l'indicateur avec dans l'image alertview – krishh

+0

Il semble que vous ayez 'CGRectZero' comme' alerta.bounds' lorsque vous utilisez l'alerte pour la deuxième fois. Essayez de sous-classer 'UIAlertView' et placez le cadre d'indicateur d'activité à' layoutSubviews' à la place. –

+0

Salut @ user2260916 vérifier ce [post] (http://stackoverflow.com/questions/4906726/how-can-i-do-uialertview-with-activity-indicator) vous permettra de résoudre votre problème, bonne chance –

Répondre

0

Vérifier MBProgressHud classe

UIActivityIndicatorView and MBProgressHUD (@ mobile.tutsplus.com)

et également

MBProgressHUD (@ github.com)

Cela peut vous aider.

+0

UIActivityIndicator son ok pour mes besoins, je ne veux pas utiliser de code tiers. – Nanoc

+0

@Divz Comment est-ce censé être utile? –

+0

Je pense que vous devriez utiliser les choses prédéfinies qui peuvent être facilement gérées dans cette classe MBProgressHud, la même chose est faite tout ce que vous créez Donc, cela vous fera gagner du temps. –