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];
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!
-(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];
}
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)
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()
}
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
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
Essayez des contrôles prêts à l'emploi. Ils sont beaucoup plus faciles à mettre en œuvre
https://www.cocoacontrols.com/controls/pulltorefreshtransform
https://www.cocoacontrols.com/controls/qbrefreshcontrol
https://www.cocoacontrols.com/controls/mspulltorefreshcontroller
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
}
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/