2013-11-22 13 views
9

Ich versuche, die Pull-to-Refresh-Funktionalität in meiner Anwendung zu implementieren. Die Architektur ist so, dass es einen UITableView innerhalb eines UIViewController gibt. Ich möchte in der Lage sein, die Tabellendarstellung bei Pulldown zu aktualisieren. Ich habe den Code unten in der viewDidLoad Methode versucht, aber es funktioniert nicht. Kann mir irgendjemand sagen, wo ich mich bei der Implementierung irre?Pull zum Aktualisieren auf UITableView In einem UIViewController

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]; 
+1

mögliche Duplikat [UIRefreshControl ohne UITableViewController] (http://stackoverflow.com/questions/12497940/uirefreshcontrol-ohne-uitableviewcontroller) – Amar

+0

mögliches Duplikat von [Pull, um UITableView ohne UITableViewController zu aktualisieren] (http://stackoverflow.com/questions/10291537/pull-to-re fresh-uitableview-with-unitableviewcontroller) – Lanorkin

Antwort

-11

UIRefreshControl without UITableViewController

Oder Sie UITableViewController anstelle eines UIViewController verwenden können.

+0

Kann aufgrund einiger Einschränkungen nicht ausgeführt werden. Gibt es eine Arbeit, so dass ich die Architektur nicht ändern muss? –

+0

Amar Post guten Link über Ihre Frage. http://stackoverflow.com/questions/12497940/uirefreshcontrol-without-uitableviewcontroller –

15

Da Sie keine UITableViewController statt UIViewController, versuchen dies zu tun verwenden können:

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; 

hoffe, das hilft!

2

können Sie hier sehen: UIRefreshControl in UIViewController (mit 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

8
-(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]; 
} 
+2

Könnten Sie eine Erklärung hinzufügen? – Sal00m

3

aktualisiert Antwort für 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) 
+0

das Hinzufügen von refreshControl1 als Unteransicht tableview funktioniert auch auf Ziel c –

0

für 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 
} 
1

für SWIFT 3 und IOS Abwärtskompatibilität

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() 
} 
Verwandte Themen