web-dev-qa-db-de.com

Zum Aktualisieren in iOS 7 ziehen

Ich versuche, die Pull-to-Refresh-Funktion unter iOS 7 in meiner Tabellenansicht ordnungsgemäß auszuführen. Auf viewDidLoad habe ich:

self.refreshControl = [[UIRefreshControl alloc] init];

    [self.refreshControl addTarget:self action:@selector(refreshInvoked:forState:) forControlEvents:UIControlEventValueChanged];

Ich laufe dann:

-(void) refreshInvoked:(id)sender forState:(UIControlState)state {
    // Refresh table here...
    [_allEntries removeAllObjects];
    [self.tableView reloadData];
    [self refresh];
}

Wenn die von der Aktualisierungsmethode aufgerufene Anforderung im didCompleteRequest-Code ausgeführt wird, habe ich:

[self.refreshControl endRefreshing];

Unter iOS 6 würde dies bedeuten, dass beim Ziehen der Tabellenansicht der kreisförmige Pfeil angezeigt wird, der beim Ziehen gedehnt wird. Wenn Sie ihn so weit ziehen, wird er aktualisiert. Im Moment sehe ich jedoch keinen kreisförmigen Pfeil, nur einen UIActivityIndicator. Manchmal funktioniert es auch und manchmal nicht. Was vermisse ich?

13
user717452

Der 'UIActivityIndicator', über den Sie sprechen, ist das neue Standardaussehen eines UIRefreshControl.

Sie ziehen nach unten und wenn der Kreis abgeschlossen ist, wird angezeigt, wie nahe Sie eine Aktualisierung auslösen.

9
Infinity James

Um UIRefreshControl in UITableView hinzuzufügen ...

1) in ViewDidLoad ..

- (void)viewDidLoad
{
    [super viewDidLoad];

    //to add the UIRefreshControl to UIView
    UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
    refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Please Wait..."]; //to give the attributedTitle
    [refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
    [tblVideoView addSubview:refreshControl];
}

2) Aufrufbezogene Methode zum Aktualisieren der UITableView-Daten ...

- (void)refresh:(UIRefreshControl *)refreshControl
{
    [self refreshTableData]; //call function you want
    [refreshControl endRefreshing];
}

OR für Swift

 let refreshControl : UIRefreshControl = UIRefreshControl.init()
 refreshControl.attributedTitle = NSAttributedString.init(string: "Please Wait...")
 refreshControl.addTarget(self, action: #selector(refresh), forControlEvents: UIControlEvents.ValueChanged)
 feedTable.addSubview(refreshControl)

 func refresh(refreshControl:UIRefreshControl){
      self.refreshTableData()//call function you want
      refreshControl.endRefreshing()
 }
21
Hardik Thakkar

Sie können den Standardaktivitätsindikator entfernen/ausblenden und eigene Bilder und Animationen hinzufügen.

Es gibt auch einen bestimmten Schwellenwert (Abstand), an dem die Tabelle vor dem Aufrufen der Aktualisierung vorgezogen werden muss. 

Hier ist unser Tutorial für Custom Pull-to-Refresh-Steuerelemente (in Objective-c und Swift): http://www.jackrabbitmobile.com/design/ios-custom-pull-to-refresh-control/

Hoffe, es hilft, lass es mich wissen, wenn ich noch etwas beantworten kann

2
Anthony Blatner

Update für Swift

Für TableView

 - (void)viewDidLoad
 {
    let refreshControl = UIRefreshControl()
    refreshControl.attributedTitle = NSAttributedString(string: "Please  Wait..")
    tableView.addSubview(refreshControl)
    refreshControl.addTarget(self, action: #selector(refreshTable), forControlEvents: UIControlEventValueChanged)
 }

- (void)refreshTable {
    //Refresh Data here
    //......
    //Once all the data is fetched. If you are loading asynchronously add the below code inside the async block
    refreshControl.endRefreshing()
    [tableView reloadData];
 }

Für UITableViewController

In UITableViewController gibt es eine Standardeigenschaft namens refreshControl, die standardmäßig null ist. Wenn Sie das refreshControl nur initialisieren und zuweisen möchten.

let refreshControl = UIRefreshControl()
refreshControl.attributedTitle = NSAttributedString(string: "Please Wait..")
yourTableViewController.refreshControl = refreshControl
1
iPrabu