web-dev-qa-db-fra.com

Tirez pour actualiser UITableView à l'intérieur d'un UIViewController

J'essaie de mettre en œuvre l'extraction pour actualiser les fonctionnalités de mon application. L'architecture est telle qu'il existe une UITableView dans une UIViewController. Je veux être en mesure d'actualiser la tableview sur le bas. J'ai essayé le code ci-dessous dans la méthode viewDidLoad, mais cela ne fonctionne pas. Quelqu'un peut-il me dire où je me trompe dans la mise en œuvre?

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
    refresh.tintColor = [UIColor grayColor];
    refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
    [refresh addTarget:self action:@selector(get_vrns) forControlEvents:UIControlEventValueChanged];
    [self.vrnTable addSubview:refresh];
9
Hassan Zaheer

Puisque vous ne pouvez pas utiliser UITableViewController au lieu de UIViewController, essayez ceci: 

UITableViewController *tableViewController = [[UITableViewController alloc] init];
tableViewController.tableView = self.vrnTable;

UIRefreshControl *refresh = [[UIRefreshControl alloc] init];
refresh.tintColor = [UIColor grayColor];
refresh.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to Refresh"];
[self.refresh addTarget:self action:@selector(get_vrns) forControlEvents:UIControlEventValueChanged];

tableViewController.refreshControl = self.refresh;

J'espère que cela t'aides!

15
aksh1t
-(void)viewDidLoad
{
   UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    [refreshControl addTarget:self action:@selector(refreshData) forControlEvents:UIControlEventValueChanged];
    //[self.mytable addSubview:refreshControl];
    UITableViewController *tableViewController = [[UITableViewController alloc] init];
    tableViewController.tableView = self.mytable;
    tableViewController.refreshControl = refreshControl;
}

-(void)refreshData
{
    //Put your logic here


   //reload table & remove refreshing image
   UITableViewController *tableViewController = [[UITableViewController alloc] init];
   tableViewController.tableView = self.mytable;
   [self.mytable reloadData];
   [tableViewController.refreshControl endRefreshing];
}
8
user3781953

Réponse mise à jour pour Swift 1.2

    var refreshControl = UIRefreshControl()
    refreshControl.backgroundColor = blue
    refreshControl.tintColor = UIColor.whiteColor()
    refreshControl.addTarget(self, action: Selector("yourFunctionHere"), forControlEvents: UIControlEvents.ValueChanged)
    self.tableView.addSubview(refreshControl)
3
leerob

Pour la compatibilité ascendante de Swift 3 et iOS

var refreshControl = UIRefreshControl()
let string = "Pull to refresh"
let attributedString = NSMutableAttributedString(string: string)
    attributedString.addAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 16)),NSForegroundColorAttributeName:UIColor.white], range: NSRange.init(location: 0, length: string.characters.count))
self.refreshControl.attributedTitle = attributedString
self.refreshControl.tintColor = UIColor.white
self.refreshControl.addTarget(self,
                             action: #selector(self.pulledDownForRefresh),
                             for: .valueChanged)
if #available(iOS 10.0, *) {
    self.accountSummaryTableView.refreshControl = refreshControl
} else {
    self.accountSummaryTableView.addSubview(refreshControl)
}

func pulledDownForRefresh() {
     //do some opertaion and then call
    self.refreshControl.endRefreshing()
}
2
satheeshwaran

vous pouvez voir ici: UIRefreshControl dans UIViewController (avec UITableView)

@interface MyViewController ()
{
    UIRefreshControl *refreshControl;
}
  @property (weak, nonatomic) IBOutlet UITableView *tableView;
@end

@implementation MyViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UIView *refreshView = [[UIView alloc] initWithFrame:CGRectMake(0, 55, 0, 0)];
    [self.tableView insertSubview:refreshView atIndex:0]; //the tableView is a IBOutlet

    refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.tintColor = [UIColor redColor];
    [refreshControl addTarget:self action:@selector(reloadDatas) forControlEvents:UIControlEventValueChanged];
    /* NSMutableAttributedString *refreshString = [[NSMutableAttributedString alloc] initWithString:@"Pull To Refresh"];
    [refreshString addAttributes:@{NSForegroundColorAttributeName : [UIColor grayColor]} range:NSMakeRange(0, refreshString.length)];
    refreshControl.attributedTitle = refreshString; */
    [refreshView addSubview:refreshControl];
}

-(void)reloadDatas
{
   //update here...

   [refreshControl endRefreshing];
}

@end

http://www.g8production.com/post/79514553078/ios7-and-uirefreshcontrol-in-uiviewcontroller-with

2
ldt25290

Si votre application prend uniquement en charge iOS 6 (et les versions ultérieures): je suggère UIRefreshControl

Si vous prenez également en charge iOS 5, vous pouvez utiliser https://github.com/enormego/EGOTableViewPullRefresh

2
Nhat Dinh
1
Jay Gajjar
1
manujmv

Pour Swift 3:

var refreshControl: UIRefreshControl!

override func viewDidLoad() {
    super.viewDidLoad()

    self.refreshControl = UIRefreshControl()

    self.refreshControl.tintColor = UIColor.black
    self.refreshControl.addTarget(self,
                                  action: #selector(ViewController.pullToRefreshHandler),
                                  for: .valueChanged)

    self.tableView.addSubview(self.refreshControl)
}

@objc func pullToRefreshHandler() {
    // refresh table view data here
}
0
pableiros

Je pense que vous devez définir le contrôle d'actualisation de UITableView. J'aurais besoin de voir plus de votre code et de voir la structure pour diagnostiquer le problème.

Voici un tutoriel pour Objective-c et Swift: http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

0
Anthony Blatner