Domanda

Voglio sostituire il pulsante di aggiornamento con indicatore di attività quando l'utente preme il pulsante di aggiornamento e dopo il Tableview viene aggiornato, voglio cambiare di nuovo al pulsante di aggiornamento. Ma quando si preme il pulsante di aggiornamento, ma non ha cambiato di indicatore di attività, ma il pulsante di aggiornamento è evidenziato fino a quando il ricaricamento dei dati è terminata.

il codice è il seguente. Mi sono perso qualcosa?

-(void) reloadNewsStarted{        
UIActivityIndicatorView *activityIndicatorRightBarItem = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
[activityIndicatorRightBarItem startAnimating];
UIBarButtonItem *activityItem = [[UIBarButtonItem alloc] initWithCustomView:activityIndicatorRightBarItem];
[activityIndicatorRightBarItem release];
self.navigationItem.rightBarButtonItem = activityItem;
[activityItem release];

[self reloadNewsEnded];
}

-(void) reloadNewsEnded {

//reload data process

UIBarButtonItem *reloadNewsBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(reloadNewsStarted)];
reloadNewsBtn.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItem = reloadNewsBtn;
[reloadNewsBtn release];  }
È stato utile?

Soluzione

Invece di scrivere

[self reloadNewsEnded];

Si prega di scrivere

[NSThread detachNewThreadSelector:@selector(reloadNewsEnded) toTarget:self withObject:nil];

questa linea di partenza nuovo thread in background in modo che l'indicatore di attività e la ricarica dei dati saranno effettuate simultaneamente in due thread.

Altri suggerimenti

è il motivo per cui questa linea alla fine del metodo reloadNewStarted

[self reloadNewsEnded];

sembra annullare solo le modifiche al tasto? Si dovrebbe essere in attesa fino a quando l'azione è stata completata prima di chiamare

La modifica il pulsante non sta per entrare in vigore fino a quando le riprende, ciclo di esecuzione controllano dal codice. Sembra che l'operazione di ricarica è sincrona e blocca la coda di eventi, che non permetterà che ciò accada. Se la vostra elaborazione richiede una notevole quantità di tempo, è necessario utilizzare un thread in background o la gestione asincrona sul loop ciclo principale (ad esempio, utilizzando NSURLConnection per gestire un compito della rete e callback) in modo da non bloccare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top