2013-05-23 6 views
0

i've просто задал этот вопрос Run code on background and get return codeWeird UIAlertView с UIActivityIndicator

И я использовал UIAlertView с индикатором активности, делая фоновую задачу, окончательный код:

-(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); 
     } 
    }]; 

Его же код, принятый ответ с UIAlertView, сразу после этого, показывая новый UIViewController, который делает аналогичную вещь в 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]; 
} 

Я использовал тот же код, чтобы показать UIAlertView с индикатором активности долгое время назад, первый alertview для подключения к интернету проверить хорошо показывает, но не второй ...

Image

Я действительно не могу понять, почему первый показывает индикатор внутри alerView, а второй показывает его вне alertView, если оба имеют точно такой же код.

И это происходит только после добавления первого UIAlertView, прежде чем добавить, что он работает хорошо.

Im действительно застрял на этом, я не могу найти решение.

У кого-нибудь есть идея?

EDIT

Легкий способ решения, я просто жёстко его.

И да, кажется, что alert.frame не установлен, может быть похож на этот вопрос: Question

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

только что установленная рама индикатора индикатора с изображением alertview – krishh

+0

Похоже, что вы используете 'CGRectZero' как' alerta.bounds' при использовании предупреждения во второй раз. Попробуйте подклассифицировать 'UIAlertView' и установить рамку индикатора активности вместо' layoutSubviews'. –

+0

hi @ user2260916 проверить это [сообщение] (http://stackoverflow.com/questions/4906726/how-can-i-do-uialertview-with-activity-indicator), вы решите свою проблему, удачи –

ответ

0

MBProgressHud Проверить класс

UIActivityIndicatorView and MBProgressHUD (@ mobile.tutsplus.com)

а также

MBProgressHUD (@ github.com)

Это может вам помочь.

+0

UIActivityIndicator это нормально для моих потребностей я не хочу использовать сторонний код. – Nanoc

+0

@ Divz, как это должно быть полезно? –

+0

Я думаю, вы должны использовать предопределенные вещи, которые можно легко управлять в этом классе MBProgressHud, то же самое делается, что когда-либо создавалось. Таким образом, это сэкономит ваше время. –

Смежные вопросы