J'essaie d'implémenter une fonctionnalité d'extraction pour actualiser une UITableView dans un UIViewController. Je ne peux pas utiliser UITableViewController parce que je veux que UITableView soit une sous-vue plus petite dans le contrôleur de vue, avec quelques autres éléments au-dessus. Je suppose que cela est possible, mais est-ce que quelqu'un a déjà vu sa mise en œuvre?
Ajouter 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 l'extraction pour actualiser la vue table. Identique à la vue collection. Il suffit de remplacer la vue de table alloc 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 bien, mais UIController est affiché en haut de UITableViewController. La façon de résoudre ce problème est de faire 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 sous forme de tableau. L'astuce est la suivante: dans les endroits où EGO prend une vue de défilement en tant que paramètre, si vous regardez la vue de table elle-même hérite de la vue de défilement.
Cela nécessite seulement cela et quelques connexions supplémentaires :)
J'espère que cela t'aides.