
Forse non tutti sanno che per aggiungere la funzionalità di refresh dei dati ad un table view controller tramite il sistema Pull Down To Refresh, non occorre più necessariamente creare tutto da zero o usare codice di terzi, almeno non più dalla versione 6 dell’iOS SDK. Da questa versione, infatti, è presente il nuovo componente Refresh Control, ispirato probabilmente alle prime app che hanno deciso di sostituire i vecchi button di aggiornamento, integrando al loro posto questo sistema sicuramente più gradevole e intuitivo.
Aggiungere il Pull Down To Refresh tramite UIRefreshControl
Vediamo brevemente come fare. Create un progetto contenente un table view controller (per questo vi rimando ai tutorial di devAPP o a quelli che potete trovare in rete).
Nel file di intestazione (.h) aggiungete la property e il metodo seguenti:
@property (strong, nonatomic) UIRefreshControl *refreshControl;
- (void) refreshData;
Il metodo si occuperà di aggiornare i dati e di mostrarli nella tabella (tramite reloadData). Mentre alla property assoceremo un’istanza di UIRefreshControl. Apriamo quindi il file di implementazione (.m) e modifichiamo il metodo initWithStyle: come segue:
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
// Refresh control
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self
action:@selector(refreshData)
forControlEvents:UIControlEventValueChanged];
}
return self;
}
Come vedete niente di complicato, inviando il messaggio addTarget:action:forControlEvents: al refresh control, verrà chiamato il metodo refreshData (quando l’utente effettuerà un pull down della tabella) che aggiornerà e mostrerà i nuovi dati nella stessa.
Implementiamo quindi il metodo refreshData:
-(void)refreshData{
// Recuperate i vostri dati aggiornati
[self.refreshControl endRefreshing];
[self.tableView reloadData];
}
Non dimenticate di inviare il messaggio endRefreshing al refresh control o questo rimarrà in stato di aggiornamento a tempo indeterminato e mostrerà perennemente la vista designata per rappresentare il refresh dei dati.
Per maggiori info: UIRefreshControl Class Reference
Semplice, vero?
Spero vi sia utile.
Alla prossima.
6 Responses to “UIRefreshControl: aggiungere il Pull Down To Refresh ai Table View Controller senza usare librerie esterne”
4 Febbraio 2014
MoxyL’unico peccato è che funziona solo con le subclass di UITableViewController e non con una table view aggiunta alla view di una subclass di UIViewController.
P.S.: Non serve aggiungere la property refreshControl visto che fa già parte dell’interface di UITableViewController.
4 Febbraio 2014
bugbaalNon proprio, è possibile usarlo ovunque creando appunto il UITableViewController a runtime e collegarlo alla nostra tableView:
UITableViewController *tvc = [[UITableViewController alloc] init];
tvc.tableView = self.myTableView;
self.refreshControl = [[UIRefreshControl alloc] init];
[self.refreshControl addTarget:self action:@selector(refreshData:) forControlEvents:UIControlEventValueChanged];
tvc.refreshControl = self.refreshControl;
4 Febbraio 2014
MoxyGrazie per il tip :). Ho sempre usato altre soluzioni per questo motivo.
5 Aprile 2014
ToninoGrazie ragazzi, ottima miniguida.
Ho solo un piccolo quesito da neofita, in un ViewController creato da Storyboard ho già un initWithNibName…dove colloco – (id)initWithStyle:(UITableViewStyle)style ??
un altro quesito relativo al trucco della creazione della UITableViewController a Runtime…dove converrebbe creare? nell’initWithStyle?
grazie mille ragazzi, siete grandi!
6 Aprile 2014
ToninoBuongiorno ragazzi, ottima mini guida.
Ho un dubbio da neofita:
il primo. Nel mio progetto ho un VieWController che ha InitWithNibName, dove colloco l’
– (id)initWithStyle:(UITableViewStyle)style?
Saluti
6 Aprile 2014
ToninoOps mi scuso per il quasi doppione, ma il messaggio inviato ieri non c’era! mi sembrava strano.
Saluti