Ich baue einen RSS-Reader mit Swift und muss Pull implementieren, um die Funktionalität neu zu laden.
Hier ist, wie ich es versuche.
class FirstViewController: UIViewController,
UITableViewDelegate, UITableViewDataSource {
@IBOutlet var refresh: UIScreenEdgePanGestureRecognizer
@IBOutlet var newsCollect: UITableView
var activityIndicator:UIActivityIndicatorView? = nil
override func viewDidLoad() {
super.viewDidLoad()
self.newsCollect.scrollEnabled = true
// Do any additional setup after loading the view, typically from a nib.
if nCollect.news.count <= 2{
self.collectNews()
}
else{
self.removeActivityIndicator()
}
view.addGestureRecognizer(refresh)
}
@IBAction func reload(sender: UIScreenEdgePanGestureRecognizer) {
nCollect.news = News[]()
return newsCollect.reloadData()
}
Ich bekomme :
Die Eigenschaft 'self.refresh' wurde beim Aufruf von super.init nicht initialisiert
Bitte helfen Sie mir, das Verhalten von Gestenerkennern zu verstehen. Ein funktionierender Beispielcode ist eine große Hilfe.
Vielen Dank.
ios
swift
xcode
uirefreshcontrol
xrage
quelle
quelle
Antworten:
Pull to Refresh ist in iOS integriert. Sie könnten dies schnell tun
Irgendwann könnten Sie die Aktualisierung beenden.
quelle
Eine Lösung mit Storyboard und schnellen ...
1.) Öffnen Sie Ihre .storyboard-Datei, wählen Sie einen TableViewController in Ihrem Storyboard aus und aktivieren Sie die Funktion "Table View Controller - Aktualisierung" in den Dienstprogrammen.
2.) Öffnen Sie die zugehörige UITableViewController-Klasse und fügen Sie der viewDidLoad-Methode die folgende Zeile hinzu.
Bearbeitet für Swift 5.0:
ODER in Swift 2.2:
3.) Fügen Sie die folgende Methode über der viewDidLoad-Methode hinzu
quelle
put self.tableView.reloadData()
undself.refreshControl?.endRefreshing()
im Rückruf?reloadData()
in die Hauptwarteschlange, um Ihre Benutzeroberfläche sofort zu aktualisieren:dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
Ich möchte eine PRETTY COOL- Funktion erwähnen , die seit iOS 10 enthalten ist:
Vorerst UIRefreshControl wird direkt in jedem der unterstützten
UICollectionView
,UITableView
undUIScrollView
!Jede dieser Ansichten verfügt über die Instanz-Eigenschaft refreshControl. Dies bedeutet, dass Sie sie nicht mehr als Unteransicht in Ihrer Bildlaufansicht hinzufügen müssen. Sie müssen lediglich Folgendes tun:
Persönlich finde ich es natürlicher, es als Eigenschaft für die Bildlaufansicht zu behandeln, als es als Unteransicht hinzuzufügen, insbesondere weil die einzig geeignete Ansicht als Übersicht für ein UIRefreshControl eine Bildlaufansicht ist, dh die Funktionalität der Verwendung von UIRefreshControl ist nur nützlich beim Arbeiten mit einer Bildlaufansicht; Aus diesem Grund sollte dieser Ansatz für die Einrichtung der Ansicht "Aktualisierungssteuerung" offensichtlicher sein.
Sie haben jedoch weiterhin die Möglichkeit, die
addSubview
auf der iOS-Version basierende Version zu verwenden:quelle
doSomething
Funktion hinzu. Wenn dieser erreichbar ist, müssen Sie Ihren Code überprüfen.Swift 4
Und Sie könnten aufhören, sich zu erfrischen mit:
quelle
tableView.reloadData()
in Ihrem Beispiel zu erwähnen !var refControl: UIRefreshControl{ let rfControl = UIRefreshControl() rfControl.attributedTitle = NSAttributedString(string: "") rfControl.tintColor = UIColor(red:0.16, green:0.68, blue:0.9, alpha:1) rfControl.addTarget(self, action: #selector(getNewMessageList), for: .valueChanged) return rfControl }
. Rufen Sie dann endRefreshing () auf, es funktioniert nicht (die Aktualisierungssteuerung wird dort immer noch angezeigt), aber folgen Sie Ihrem Weg, es hat funktioniert. Bitte lassen Sie mich wissen, warum..valueChanged
Ereignis ausgelöst? Ich verstehe diesen Zusammenhang nicht.In Swift verwenden Sie dies,
Wenn Sie Pull zum Aktualisieren in WebView haben möchten,
Probieren Sie diesen Code aus:
quelle
Anhils Antwort hat mir sehr geholfen.
Nachdem ich weiter experimentiert hatte, bemerkte ich jedoch, dass die vorgeschlagene Lösung manchmal einen nicht so hübschen UI-Fehler verursacht .
Stattdessen hat sich dieser Ansatz * für mich bewährt.
* Swift 2.1
quelle
Der Fehler sagt Ihnen, dass er
refresh
nicht initialisiert ist. Beachten Sie, dass Sie gewählt haben , umrefresh
nicht optional, das in Swift bedeutet , dass es hat einen Wert haben , bevor Sie anrufensuper.init
(oder implizit genannt, die Ihr Fall zu sein scheint). Machenrefresh
Sie entweder optional (wahrscheinlich was Sie wollen) oder initialisieren Sie es auf irgendeine Weise.Ich würde vorschlagen, die Swift-Einführungsdokumentation noch einmal zu lesen, die dies ausführlich behandelt.
Eine letzte Sache, die nicht Teil der Antwort ist, wie von @Anil hervorgehoben, gibt es eine eingebaute Pull-to-Refresh-Steuerung in iOS
UIRefresControl
, die einen Blick wert sein könnte.quelle
Ich habe eine RSS-Feed-App erstellt, in der ich eine Pull-To-Aktualisierungsfunktion habe , die ursprünglich einige der oben aufgeführten Probleme hatte.
Um die Antworten der Benutzer oben zu ergänzen, habe ich überall nach meinem Anwendungsfall gesucht und konnte ihn nicht finden. Ich habe Daten aus dem Internet heruntergeladen (RSSFeed) und wollte meine Tabellenansicht der Geschichten zum Aktualisieren aufrufen.
Was oben erwähnt wurde, deckt die richtigen Bereiche ab, aber mit einigen der Probleme, die Menschen haben, habe ich Folgendes getan und es ist ein Vergnügen:
Ich habe den Ansatz von @Blankarsch gewählt und bin zu meinem main.storyboard gegangen und habe die Tabellenansicht ausgewählt, um die Aktualisierung zu verwenden. Dann wurde nicht erwähnt, dass IBOutlet und IBAction erstellt werden, um die Aktualisierung effizient zu nutzen
Hoffe das hilft jemandem in der gleichen Situation wie ich
quelle
quelle
Einzelheiten
Eigenschaften
Lösung
Verwendung
Vollständige Probe
quelle
Swift 5
quelle
Ich schlage vor, eine Erweiterung von Pull To Refresh zu erstellen, die in jeder Klasse verwendet werden kann.
1) Erstellen Sie eine leere Swift-Datei: Datei - Neu - Datei - Swift-Datei.
2) Fügen Sie Folgendes hinzu
3) Rufen Sie in Ihrem View Controller die folgenden Methoden auf:
4) Irgendwann wollten Sie die Aktualisierung beenden:
quelle
Damit der Pull aktualisiert wird, verwende ich
DGElasticPullToRefresh
https://github.com/gontovnik/DGElasticPullToRefresh
Installation
pod 'DGElasticPullToRefresh'
überschreiben func viewWillAppear (_ animiert: Bool)
Und vergessen Sie nicht, den Verweis zu entfernen, während die Ansicht verschwindet
Um Pull zum Aktualisieren zu entfernen, geben Sie diesen Code in Ihre ein
überschreiben func viewDidDisappear (_ animiert: Bool)
Und es wird so aussehen
Viel Spaß beim Codieren :)
quelle
Sie können dies erreichen, indem Sie nur wenige Codezeilen verwenden. Warum stecken Sie also in einer Bibliothek oder Benutzeroberfläche von Drittanbietern fest? Pull to Refresh ist in iOS integriert. Sie könnten dies schnell tun
quelle
Sie können diese Unterklasse von tableView verwenden:
1 - Ändern Sie im Interface Builder die Klasse Ihrer tableView in
PullToRefreshTableView
oder erstellen Sie einePullToRefreshTableView
programmgesteuerte2 - Implementieren Sie den
PullToRefreshTableViewDelegate
Controller in Ihrer Ansicht3 -
tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
wird in Ihrem View Controller aufgerufen, wenn die Tabellenansicht aktualisiert wird4 - Rufen Sie
yourTableView.endRefreshing()
an, um die Aktualisierung zu beendenquelle
So habe ich es mit Xcode 7.2 zum Laufen gebracht, was meiner Meinung nach ein großer Fehler ist. Ich benutze es in meinem
UITableViewController
InnerenviewWillAppear
Wie Sie sehen können, muss ich die
configureMessage()
Methode buchstäblich aufrufen , nachdem ich meine eingerichtet habe.UIRefreshControl
Danach funktionieren nachfolgende Aktualisierungen einwandfrei.quelle
Andere Antworten sind richtig, aber für weitere Details überprüfen Sie diesen Beitrag Pull to Refresh
Wenn Sie mit einem UITableViewController arbeiten, ist die Lösung recht einfach: Wählen Sie zunächst den Tabellenansichts-Controller in Ihrem Storyboard aus, öffnen Sie den Attributinspektor und aktivieren Sie die Aktualisierung:
Ein UITableViewController ist standardmäßig mit einem Verweis auf ein UIRefreshControl ausgestattet. Sie müssen lediglich einige Dinge verkabeln, um die Aktualisierung zu initiieren und abzuschließen, wenn der Benutzer herunterfährt.
Fügen Sie in Ihrer Überschreibung von viewDidLoad () ein Ziel hinzu, um die Aktualisierung wie folgt durchzuführen:
refreshControl.endRefreshing()
Für weitere Informationen gehen Sie bitte auf Link und alle Gutschriften gehen an diesen Beitrag
quelle