2013-01-17 5 views
1

J'ai un FirstView chargé avec tableView et quand un bouton accessoire de tableviewCell est tapé puis il va à SecondView.Les données dans SecondView est chargé de l'URL de service et donc cela prend du temps.Alors je dois montrer activityIndicator quand accessorybutton est tapoté, arrêtez-le après avoir chargé toutes les données .BUt je ne pouvais pas voir l'indicateur d'activité s'afficher.UIActivityIndicator non affiché

Ce code Im travaille sur:

- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 

activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)]; 
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
activityIndicator.color = [UIColor redColor]; 
[scrollView addSubView:activityIndicator]; 
[activityIndicator startAnimating]; 
activityIndicator.frame=CGRectMake(140, 195, 37, 37); 
[activityIndicator startAnimating]; 

     SecondView *secView = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil]; 
     secView.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal; 

     UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath]; 
     UILabel *name1 = (UILabel*)[cell viewWithTag:111]; 
     secView.provName = [name1 text]; 

     [self presentModalViewController: secView animated:NO]; 

     [secView release]; 
    } 

Là où je vais mal?

EDIT:

SecondView:

-(void)viewWillAppear:(BOOL)animated 

{ 
    activityIndictr = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)]; 
    activityIndictr.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 

    activityIndictr.color = [UIColor redColor]; 
    [testscroll addSubview:activityIndictr]; 
    [activityIndictr startAnimating]; 

} 

-(void)viewDidLoad 
{ 
    [super viewDidLoad] 
    // I m calling many service urls(10) and assigning to labels and tableview 
    [activityIndictr stopAnimating]; 

} 

Répondre

0

vous allouez deux indicateurs d'activité, jeter le premier loin, puis commencer à animer la seconde deux fois et ne jamais ajouter un indicateur d'activité dans une vue existante. Pas étonnant que ça ne se montre pas. Essayez [[secView view] addSubview:activityIndicator] ou quelque chose de similaire.

+0

Désolé, mais je ne u.By obtenir ce stmnt « jeter le premier loin » si le premier indicateur n'est pas alors y pour le créer.? – Sindhia

1

Vous devez appeler l'indicateur d'activité dans le ViewWillAppear de SecondView, de sorte que, immédiatement après avoir appuyé sur cette vue, le voyant d'activité démarre, puis l'annule lorsque toutes les données sont analysées depuis l'URL.

En effet, le deuxième View Controller sera poussé presque immédiatement et les données va prendre du temps pour charger

+0

+ 1 c'est le problème .. – Rushi

+0

parti avec vous mais je ne vois pas l'indicateur s'affiche immédiatement après avoir tapé accesssorybutton et apparaît après SecondView est complètement chargé – Sindhia

+0

@Sindhia combien de temps faut-il pour votre première vue d'aller dans la deuxième vue ? – IronManGill

0

Faites ceci en viewWillAppear de SecondView:

activityIndicator = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(143, 220, 37, 37)]; 
activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 
[self.view addSubview:activityIndicator]; 
[activityIndicator startAnimating]; 
+0

Essayé ur code mais je ne vois pas l'indicateur s'affiche immédiatement après avoir appuyé sur accesssorybutton et apparaît après que SecondView est complètement chargé.Quelque chose elz devrais-je besoin de modifier ? – Sindhia

+0

J'ai édité mon code essayez ceci. – Rushi

+0

Toujours le même résultat que le précédent. Dont maintenant y – Sindhia

0

Encore une fois j'ai mis à jour la réponse.

mis ce code dans appdelegate et définir l'objet statique dans appdelegate comme ci-dessous

UIActivityIndicatorView statique * activityView;

+(void)showActivityIndicator{ 

if (!activityView) { 
    activityView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; 
    activityView.center = CGPointMake(160, 230); 
    [activityView startAnimating]; 
    UIWindow *win = [UIApplication sharedApplication].keyWindow; 
    [win addSubview:activityView]; 
} 
} 


+(void)removeActivityIndicator{ 
if ([activityView superview]) { 
    [activityView removeFromSuperview]; 
    activityView = nil; 
} 
} 






- (void) tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath 
{ 
UIWindow *window = [UIApplication sharedApplication].keyWindow; 

//global static activity indicator... you can access from any other view controlller 

[AppDelegate showActivityIndicator]; 

} 

Et après avoir obtenu une réponse

[AppDelegate removeActivityIndicator]; 
+0

Je l'ai fait comme vous l'avez dit.Créé activtyindicator dans AppDelegate et l'appelant dans accesssorybutton tapé.Mais il ne fonctionne pas.Quand j'ajoute un indicateur d'activité à window dans accessorybuttonTapped (FirstView) et le retirer de SecondView après le chargement des données puis SecondView, Im get error "activityIndicator non déclaré." Comment dois-je le créer? – Sindhia

+0

@Sindhia J'ai mis à jour le code .. le trouver .. si vous avez des problèmes laissez-moi savoir – SachinVsSachin

+0

Non, il ne fonctionne pas Sachin.Il va montrer ShowActivityIndicator() mais et l'exécution des instructions à l'intérieur, mais immédiatement comme il revient à SecondView * secView = [[SecondView alloc] initWithNibName: @ "SecondView" bundle: nil]; indicateur n'est pas reconnu.Puis-je faire SecondView * secView = [[ SecondView alloc] initWithNibName: @ "SecondView" bundle: nil] pour démarrer après 2 secondes activityindicator commence à animer? – Sindhia