J'ai un UitailView qui d'un flux RSS externe.
Lorsque vous sélectionnez une ligne, il utilise NavigationController et glisse à partir de la droite, le problème est que le flux RSS contient donc quelques secondes pour charge et sans indication de ce qui se passe, vous pouvez la confondre pour un crash d'application. P>
J'ai décidé d'ajouter une fileuse afin que vous sachiez que la nouvelle page est chargée. P>
ici est mon code: p>
racineviewcontroller.m p> daysviewcontroller.m p> Il y en a deux problèmes avec ce code. P> Si quelqu'un pouvait m'aider avec ce problème, je serais vraiment graticablement. P> P>
3 Réponses :
Vous ajoutez la vue Indicateur d'activité à la vue du contrôleur qui appuie le contrôleur de vue détaillée, de sorte que vous ne le verrez pas quand même
Essayez de déplacer le deuxième groupe de code sur la méthode ViewDidLoad de DétailsViewController, vous pouvez appeler Stophanimant sur l'indicateur d'activité lorsque vous avez terminé le chargement. Pour obtenir une référence à l'uactivitéIndicator, vous devez ajouter une balise P>
E.g. Dans la vue ViewDidDload P>
[[self.view viewWithTag:12] stopAnimating];
Cela ne fonctionne pas car les DétailsViewController ne "affichent" pas tant que toutes les informations sont effectuées en cours de chargement.
La vue Détails ne montre pas parce que vous chargez les données de manière synchrone, qui bloque le fil. Vous devez effectuer cette demande en arrière-plan si vous souhaitez afficher un indicateur d'activité d'animation
Cela a bien fonctionné pour moi, mais j'avais besoin de l'ajouter à l'application Master-Détail. J'ai fini par charger la spinner de la même manière dans la vue Master (pas en tant que sous-visView de la TableView), une fois que ma liste a fini de charger, j'ai supprimé la fileuse de la vue Master à l'aide de [[Self.ViewWithTag: 12] Retirezfromsuperview ]; code>, je réattachais une erreur pour l'appel de phase d'arrêt, car [Self.View ViewWithTag: 12] code> retourne une vue et non un uiactivitéIndicatorView code> avec la méthode Stophanimant.
Vous devez faire du travail dans un fil d'arrière-plan. Si la ligne suivante est celle qui prend le temps: alors vous pouvez le faire en arrière-plan avec GCD: p> et +1 à @ wattson12 - Vous devez ajouter la spinner à la nouvelle vue à la place. Sinon, vous pouvez ajouter la fileuse à la vue actuelle et mettre le point final - vous voulez supprimer le filateur Depuis sa superview une fois que vous l'avez empêché d'animation. Alternativement, vous pouvez avoir une seule instance de la spinner et définir pushviewController code> dans votre bloc de file d'attente principal GCD. P> Hideswhensplié code> à Oui. P> P>
Ceci est une roue de filage sur une vue floue à Swift:
J'ai utilisé cette méthode et ça fonctionne vraiment bien. Mais lorsque j'essaie d'arrêter l'animation en appelant bluview.removefromsuperview () code> il ne change rien. Aucun conseil?
Je pense que vous manquez toujours le code où la vue de l'indicateur d'activité est arrêtée / supprimée. Aussi: Comment chargez-vous les images? Si vous utilisez une méthode de blocage (c'est-à-dire une méthode qui ne fonctionne pas dans un fil d'arrière-plan), toute votre boucle principale sera bloquée, ce qui signifie: Aucune interaction utilisateur, aucune animation, etc. (qui expliquerait ce comportement). Si tel est le cas, vous devez vraiment passer au chargement asynchrone.
@Triphoenix Comment savez-vous s'il s'agit d'une méthode de blocage ou non? J'ai ajouté dans le code sur DétailsViewController.m
Vous pouvez dire être la façon dont la fonction fonctionne: les fonctions de blocage retourneront la valeur immédiatement, dans ce cas
initwithcontentsofurl code> aura placé les données dans votrensdata code> afin que le funciton ne puisse donc pas retourner avant avoir retourné ces données. Les demandes asynchrones sont plus complexes dans le sens où vous démarrez la demande et que vous n'aurez pas le résultat renvoyé, mais la demande appellera plutôt une fonction de rappel sur votre code lorsqu'elle est terminée. Il existe des cadres tels que ASIHTTPEQUEST qui faciliteront cela ou vous pouvez utiliser NsurlConnection et le faire par vous-même.