J’essaie d’implémenter une fonctionnalité de rafraîchissement dans un UITableView dans un UIViewController. Je ne peux pas utiliser un UITableViewController parce que je veux que UITableView soit une sous-vue plus petite dans le contrôleur de vue, avec d’autres éléments au-dessus. Je suppose que c’est possible, mais est-ce que quelqu’un en a vu une mise en œuvre?
Ajoutez un contrôle d’actualisation directement à un UITableView
sans utiliser un UITableViewController
:
override func viewDidLoad() { super.viewDidLoad() let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: #selector(refresh(_:)), for: .valueChanged) if #available(iOS 10.0, *) { tableView.refreshControl = refreshControl } else { tableView.backgroundView = refreshControl } } @objc func refresh(_ refreshControl: UIRefreshControl) { // Do your job, when done: refreshControl.endRefreshing() }
Objective-C :
Voici comment vous pouvez implémenter la fonction de rafraîchissement pour la vue de table. Identique à la vue de collection. Remplacez simplement l’allocation de vue de table par la vue de collection.
UITableView *tableViewDemo = [[UITableView alloc]init]; tableViewDemo.frame = CGRectMake(0,0,self.view.frame.size.width,self.view.frame.size.height); tableViewDemo.dataSource = self; tableViewDemo.delegate = self; [self.view addSubView: tableViewDemo]; UIRefreshControl *refreshController = [[UIRefreshControl alloc] init]; [refreshController addTarget:self action:@selector(handleRefresh:) forControlEvents:UIControlEventValueChanged]; [tableViewDemo addSubview:refreshController]; #pragma mark - Handle Refresh Method -(void)handleRefresh : (id)sender { NSLog (@"Pull To Refresh Method Called"); [refreshController endRefreshing]; }
Cette solution de @berik fonctionne correctement, mais le contrôleur UIController est affiché en haut de UITableViewController. La façon de le réparer est ce changement:
override func viewDidLoad() { let refreshControl = UIRefreshControl() refreshControl.addTarget(self, action: "refresh:", forControlEvents: .ValueChanged) tableView.backgroundView = refreshControl // <- THIS!!! } func refresh(refreshControl: UIRefreshControl) { // Do your job, when done: refreshControl.endRefreshing() }
J’ai implémenté EGORefreshTableHeaderView avec un UIViewController et une vue de table simple, l’astuce étant que, aux endroits où EGO prend un affichage défilement comme paramètre, si vous regardez la vue de la table elle-même hérite de la vue défilement.
Cela ne nécessite que cela et quelques connexions supplémentaires 🙂
J’espère que cela t’aides.
Il semble que si vous créez le UIRefreshControl dans la méthode loadView de viewController , tout fonctionne correctement . UIRefreshControl se comporte comme il se doit. Testé avec iOS 7.1 et iOS 8.2
J’ai fini par utiliser ODRefreshControl . Il n’a pas besoin de hack comme le tableView.backgroundView = refreshControl
ci-dessus tableView.backgroundView = refreshControl
, fonctionne presque de la même manière et donne une meilleure interface utilisateur.