Domanda

Ho un app utilizzando UITableViews e il recupero dei dati da un server. Sto tentando di mettere un UIActivityIndicatorView sul UITableView genitore, in modo che gira, mentre l'UITableView Bambino è carico. Ho l'UIActivityIndicatorView tutti hookedup attraverso Interface Builder, ecc

-(void)spinTheSpinner {
    NSLog(@"Spin The Spinner");
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [spinner startAnimating];
    [NSThread sleepForTimeInterval:9];
    [self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:NO];
    [pool release]; 
}

-(void)doneSpinning {
    NSLog(@"done spinning");
    [spinner stopAnimating];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];

    NSMutableString *tempText = [[NSMutableString alloc] initWithString:[categoryNumber objectAtIndex:indexPath.row]];
    Threads *viewController = [[Threads alloc] initWithNibName:@"newTable" bundle:nil tagval:tempText SessionID:PHPSESSID];
    [self.navigationController pushViewController:viewController animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    [viewController release];                   
}

Così, quando spingo l'UITableView Bambino sullo schermo, l'UIActivityIndicatorView (ogiva) si trova appena là sulla UITableView Parent. Se vado al Bambino UITableView e poi rapidamente tornare alla Capogruppo View, posso prendere l'UIActivitIndicatorView nell'atto di filatura. I NSLogs stanno mostrando al momento giusto - quando ho tocca la cella nella UITableView Parent, appare il simbolo "Spin The Spinner" nel log. 9 secondi dopo, ho "spinning fatto" nel registro, ma il filatore non gira a meno che io pop torna al UITableView Capogruppo nel tempo.

Le idee di perché questo non funziona correttamente?

È stato utile?

Soluzione

Forse lo sleepForTimeInterval sta bloccando l'animazione.

Provare a rimuovere lo sleepForTimeInterval e sostituire performSelectorOnMainThread con una chiamata a performSelector:withObject:afterDelay:.

Altri suggerimenti

lasciare il display ui si filettatura esterna:

[NSObject dispatchUI:^{
     [spinner startAnimating];
}];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top