web-dev-qa-db-fra.com

Tirez pour rafraîchir dans iOS 7

J'essaie de bien tirer parti de l'actualisation de la fonctionnalité sous iOS 7 dans la vue Tableau. Sur viewDidLoad, j'ai:

self.refreshControl = [[UIRefreshControl alloc] init];

    [self.refreshControl addTarget:self action:@selector(refreshInvoked:forState:) forControlEvents:UIControlEventValueChanged];

Je cours ensuite:

-(void) refreshInvoked:(id)sender forState:(UIControlState)state {
    // Refresh table here...
    [_allEntries removeAllObjects];
    [self.tableView reloadData];
    [self refresh];
}

Lorsque la demande que la méthode d'actualisation appelle est terminée, dans le code didCompleteRequest, j'ai:

[self.refreshControl endRefreshing];

Sur iOS 6, cela signifierait que lorsque vous tirez sur la vue de la table, elle affiche la flèche circulaire qui s’étire au fur et à mesure que vous tirez et qui, une fois tiré suffisamment loin, s’actualise. Pour le moment, cependant, je ne vois aucune flèche circulaire, juste un indicateur UIActivityIndicator. Cela fonctionnera aussi parfois et parfois non. Qu'est-ce que je rate?

13
user717452

Le 'UIActivityIndicator' dont vous parlez est la nouvelle apparence par défaut d'un UIRefreshControl.

Vous abaissez et, à la fin du cercle, il indique à quel point vous êtes sur le point de déclencher une actualisation.

9
Infinity James

Pour ajouter UIRefreshControl dans votre UITableView ...

1) dans ViewDidLoad ..

- (void)viewDidLoad
{
    [super viewDidLoad];

    //to add the UIRefreshControl to UIView
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Please Wait..."]; //to give the attributedTitle
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [tblVideoView addSubview:refreshControl];
}

2) appeler la méthode pour actualiser les données UITableView ...

- (void)refresh:(UIRefreshControl *)refreshControl
{
    [self refreshTableData]; //call function you want
    [refreshControl endRefreshing];
}

OR pour Swift

 let refreshControl : UIRefreshControl = UIRefreshControl.init()
 refreshControl.attributedTitle = NSAttributedString.init(string: "Please Wait...")
 refreshControl.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
 feedTable.addSubview(refreshControl)

 func refresh(refreshControl:UIRefreshControl){
      self.refreshTableData()//call function you want
      refreshControl.endRefreshing()
 }
21
Hardik Thakkar

Vous pouvez supprimer/masquer l'indicateur d'activité par défaut et ajouter vos propres images et animations.

Il existe également une certaine valeur de seuil (distance) que la table doit être extraite avant que l'actualisation ne soit appelée. 

Voici notre tutoriel pour les commandes personnalisées d'actualisation pour actualiser les commandes (dans objective-c et Swift): http://www.jackrabbitmobile.com/design/ios-custom-pull-tull-refresh-control/

J'espère que ça aide, laissez-moi savoir si je peux répondre à autre chose

2
Anthony Blatner

Mise à jour pour Swift

Pour TableView

 - (void)viewDidLoad
 {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Please  Wait..")
    tableView.addSubview(refreshControl)
    refreshControl.addTarget(self, action: #selector(refreshTable), forControlEvents: UIControlEventValueChanged)
 }

- (void)refreshTable {
    //Refresh Data here
    //......
    //Once all the data is fetched. If you are loading asynchronously add the below code inside the async block
    refreshControl.endRefreshing()
    [tableView reloadData];
 }

Pour UITableViewController

UITableViewController contient une propriété par défaut appelée refreshControl qui, par défaut, est nil. Si vous voulez simplement initialiser le refreshControl et l’affecter.

let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Please Wait..")
yourTableViewController.refreshControl = refreshControl
1
iPrabu