Je construis un lecteur RSS à l'aide de swift et j'ai besoin d'implémenter la fonctionnalité pull to recharger.
Voici comment j'essaye de le faire.
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()
}
Je reçois :
La propriété 'self.refresh' n'est pas initialisée lors de l'appel super.init
Veuillez m'aider à comprendre le comportement des reconnaisseurs de gestes. Un exemple de code de travail sera d'une grande aide.
Merci.
ios
swift
xcode
uirefreshcontrol
xrage
la source
la source
Réponses:
Tirer pour actualiser est intégré à iOS. Vous pouvez le faire rapidement comme
À un moment donné, vous pourriez finir par vous rafraîchir.
la source
Une solution avec storyboard et rapide ...
1.) Ouvrez votre fichier .storyboard, sélectionnez un TableViewController dans votre storyboard et "Activez" le contrôleur de vue de table - Fonction d'actualisation dans les utilitaires.
2.) Ouvrez la classe UITableViewController associée et ajoutez la ligne suivante dans la méthode viewDidLoad.
Modifié pour Swift 5.0:
OU dans Swift 2.2:
3.) Ajoutez la méthode suivante au-dessus de la méthode viewDidLoad
la source
put self.tableView.reloadData()
etself.refreshControl?.endRefreshing()
dans le rappel?reloadData()
dans la file d'attente principale pour actualiser instantanément votre interface utilisateur:dispatch_async(dispatch_get_main_queue(),{ self.tableView.reloadData() });
Je voudrais mentionner une fonctionnalité PRETTY COOL incluse depuis iOS 10, qui est:
Pour l'instant, UIRefreshControl est directement pris en charge dans chacun d'entre eux
UICollectionView
,UITableView
etUIScrollView
!Chacune de ces vues a une propriété d'occurrence refreshControl , ce qui signifie qu'il n'est plus nécessaire de l'ajouter en tant que sous-vue dans votre vue de défilement , il vous suffit de:
Personnellement, je trouve plus naturel de le traiter comme une propriété pour la vue de défilement plutôt que de l'ajouter comme sous-vue, en particulier parce que la seule vue appropriée à être comme une vue d'ensemble pour un UIRefreshControl est une vue de défilement, c'est-à-dire que la fonctionnalité d'utilisation d'UIRefreshControl n'est que utile lorsque vous travaillez avec une vue de défilement; C'est pourquoi cette approche devrait être plus évidente pour configurer la vue de contrôle de rafraîchissement.
Cependant, vous avez toujours la possibilité d'utiliser le
addSubview
basé sur la version iOS:la source
doSomething
fonction, s'il est accessible alors vous devez faire vérifier votre code.Swift 4
Et vous pouvez arrêter de vous rafraîchir avec:
la source
tableView.reloadData()
dans votre exemple!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 }
. Appelez ensuite endRefreshing (), cela ne fonctionne pas (le contrôle d'actualisation s'affiche toujours là-bas), mais suivez votre chemin, cela a fonctionné, veuillez me faire savoir pourquoi?.valueChanged
événement est-il déclenché? Je ne comprends pas ce lien.Dans Swift, utilisez ceci,
Si vous souhaitez que le pull soit actualisé dans WebView,
Essayez donc ce code:
la source
La réponse d'Anhil m'a beaucoup aidé.
Cependant, après avoir expérimenté davantage, j'ai remarqué que la solution suggérée provoque parfois un problème d'interface utilisateur pas si joli .
Au lieu de cela, opter pour cette approche * a fait l'affaire pour moi.
* Swift 2.1
la source
Ce que l'erreur vous dit, c'est que ce
refresh
n'est pas initialisé. Notez que vous avez choisi de nerefresh
pas rendre facultatif, ce qui dans Swift signifie qu'il doit avoir une valeur avant d'appelersuper.init
(ou il est implicitement appelé, ce qui semble être votre cas). Soit rendrerefresh
facultatif (probablement ce que vous voulez) ou l'initialiser d'une manière ou d'une autre.Je suggérerais de relire la documentation d'introduction de Swift, qui couvre cela en détail.
Une dernière chose, ne faisant pas partie de la réponse, comme l'a souligné @Anil, il existe un pull intégré pour rafraîchir le contrôle dans iOS appelé
UIRefresControl
, qui pourrait être quelque chose qui mérite d'être étudié .la source
J'ai créé une application de flux RSS dans laquelle j'ai une fonction d' actualisation Pull To qui avait à l'origine certains des problèmes répertoriés ci-dessus.
Mais pour ajouter aux réponses des utilisateurs ci-dessus, je cherchais partout mon cas d'utilisation et je ne l'ai pas trouvé. Je téléchargeais des données sur le Web (RSSFeed) et je voulais dérouler ma tableVoir les histoires à rafraîchir.
Ce qui est mentionné ci-dessus couvre les bons domaines, mais avec certains des problèmes que les gens ont, voici ce que j'ai fait et cela fonctionne un régal:
J'ai adopté l'approche de @Blankarsch et je suis allé sur mon tableau principal et sélectionner la vue de table pour utiliser le rafraîchissement, puis ce qui n'a pas été mentionné est la création d'IBOutlet et d'IBAction pour utiliser le rafraîchissement efficacement
J'espère que cela aide toute personne dans la même situation que moi
la source
la source
Détails
Caractéristiques
Solution
Usage
Échantillon complet
la source
Swift 5
la source
Je suggère de faire une extension de pull To Refresh à utiliser dans chaque classe.
1) Créez un fichier Swift vide: Fichier - Nouveau - Fichier - Fichier Swift.
2) Ajoutez les éléments suivants
3) Dans votre View Controller, appelez ces méthodes comme suit:
4) À un moment donné, vous avez voulu mettre fin à l'actualisation:
la source
Pour le pull pour rafraîchir j'utilise
DGElasticPullToRefresh
https://github.com/gontovnik/DGElasticPullToRefresh
Installation
pod 'DGElasticPullToRefresh'
remplacer func viewWillAppear (_ animated: Bool)
Et n'oubliez pas de supprimer la référence pendant que la vue disparaît
pour supprimer tirer pour actualiser mettre ce code dans votre
remplacer func viewDidDisappear (_ animated: Bool)
Et ça ressemblera
Bon codage :)
la source
Vous pouvez y parvenir en utilisant quelques lignes de code. Alors pourquoi vous allez rester coincé dans une bibliothèque ou une interface utilisateur tierce. Tirer pour actualiser est intégré à iOS. Vous pouvez le faire rapidement comme
la source
vous pouvez utiliser cette sous-classe de tableView:
1 - dans le générateur d'interface, changez la classe de votre tableView
PullToRefreshTableView
ou créez unPullToRefreshTableView
programme2 - implémentez le
PullToRefreshTableViewDelegate
dans votre contrôleur de vue3 -
tableViewDidStartRefreshing(tableView: PullToRefreshTableView)
sera appelé dans votre contrôleur de vue lorsque la vue de table commencera à se rafraîchir4 - appelez
yourTableView.endRefreshing()
pour terminer le rafraîchissementla source
C'est ainsi que je l'ai fait fonctionner en utilisant Xcode 7.2 qui, je pense, est un bug majeur. Je l'utilise à l'intérieur de mon
UITableViewController
intérieurviewWillAppear
Comme vous pouvez le voir, je dois littéralement appeler la
configureMessage()
méthode après avoir configuré monUIRefreshControl
puis après cela, les rafraîchissements suivants fonctionneront bien.la source
D'autres réponses sont correctes, mais pour plus de détails, consultez ce post Pull to Refresh
Lorsque vous travaillez avec un UITableViewController, la solution est assez simple: tout d'abord, sélectionnez le contrôleur de vue de table dans votre storyboard, ouvrez l'inspecteur d'attributs et activez l'actualisation:
Un UITableViewController est fourni avec une référence à un UIRefreshControl prêt à l'emploi. Il vous suffit de câbler quelques éléments pour lancer et terminer l'actualisation lorsque l'utilisateur tire vers le bas.
Dans votre remplacement de viewDidLoad (), ajoutez une cible pour gérer l'actualisation comme suit:
refreshControl.endRefreshing()
Pour plus d'informations s'il vous plaît aller à mentionner Link et tout le mérite va à ce poste
la source