Problème avec un Wait Screen View
DonSilya
Membre
Bonjour,
Je développe actuellement une appli iPhone (SDK 3.1.3) et j'ai un petit problème lors de l'affichage d'un View (plus exactement un View "Recherche en cours")
Je m'explique : lorsque j'affiche une TableView avec des cellules, l'utilisateur à la possibilité de cliquer sur une cellule pour afficher les détails. Entre-temps, j'affiche un View pour indiquer que le chargement est en cours.
Or, s'il y a plusieurs cellules dans le résultat, et que l'utilisateur scroll la TableView pour cliquer sur une cellule en bas, le View "Recherche en cours" ne s'affiche plus correctement. (soit il s'affiche à moitié ou ne s'affiche pas car il reste en haut de la page).
Donc j'aimerais savoir si c'est possible d'identifier la position de la Table View pour bien positionner le Wait Screen View, ou bien de remonter automatiquement la Table View en haut quand je clique sur une cellule.
J'espère que j'étais assez clair dans mes explications
Merci d'avance pour vos réponses et bonne journée,
Je développe actuellement une appli iPhone (SDK 3.1.3) et j'ai un petit problème lors de l'affichage d'un View (plus exactement un View "Recherche en cours")
Je m'explique : lorsque j'affiche une TableView avec des cellules, l'utilisateur à la possibilité de cliquer sur une cellule pour afficher les détails. Entre-temps, j'affiche un View pour indiquer que le chargement est en cours.
Or, s'il y a plusieurs cellules dans le résultat, et que l'utilisateur scroll la TableView pour cliquer sur une cellule en bas, le View "Recherche en cours" ne s'affiche plus correctement. (soit il s'affiche à moitié ou ne s'affiche pas car il reste en haut de la page).
Donc j'aimerais savoir si c'est possible d'identifier la position de la Table View pour bien positionner le Wait Screen View, ou bien de remonter automatiquement la Table View en haut quand je clique sur une cellule.
J'espère que j'étais assez clair dans mes explications
Merci d'avance pour vos réponses et bonne journée,
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai pas très bien compris, tu veux afficher le "chargement en cours" juste au dessus de la cellule cliquée ? Ou l'afficher pour que ça couvre tout l'écran?
Peux-tu nous mettre un bout de code pour voir comment tu l'affiches pour l'instant ?
Merci pour votre réponse,
Oui effectivement je veux afficher le wait screen au dessus de la cellule pour qu'il couvre tout l'écran.
Voici mon code :
Une capture d'écran du simulateur : http://twitpic.com/1spf2d
N'hésite pas à mettre ton code entre les balises CODE pour qu'il soit plus lisible par les membres. Merci.
J'ai pas testé mais je pense que ça devrait marcher avec un UIViewController classique. Tu fais un addSubview de ta UITableView sur la view de ce viewController. Et du coup si tu fais un addSubview de ta vue waitScreen sur la view du viewController ça devrait avoir l'effet que tu veux...
Une autre solution sinon c'est de changer la page, afficher la page de détails vide avec un petit UIActivityIndicatorView le temps que ça charge puis le supprimer pour bien afficher les détails
Par ailleurs, pourriez-vous me donnez plus de détails sur votre deuxième solution qui me paraà®t trés intéressante (ça ne fait que deux mois que je développe des app iPhone ^^)
Merci d'avance,
par:
Pour la deuxième solution, tu crées un UIViewController qui ne contient qu'un UIActivityIndicatorView, et dans la méthode "viewDidAppear" du UIViewController tu lances la requête pour afficher les détails. Et dès que t'auras le résultat, t'auras plus qu'à faire un addSubview par dessus ton activityIndicator...
Bonne chance.
Par contre pour rentrer dans les détails de mon soucis la subView ne s'affiche pas a tous les coups.
Le rechargement de donnée se passe bien et ça n'entraine pas de conséquences si la subView s'affiche pas a part que l'utilisateur peut continuer de cliquer et risque fortement de relancer un rechargement de donnée alors qu'il est déjà entrain de se passer. Là je sais que mon appli risque de planter.
Tu peux aussi jouer avec le
Le temps que les donnée se charge
@Metablue : ça me résout la moitié de mon problème, j'arrive mnt à bloquer ma Table quand je clique ^^ il me reste seulement à bien positionner mon wait screen
non je te disais de remplacer parentDelegate.view par self.view !
relis mon post précédent...
Mnt il me donne une erreur : request for member 'view' in something not a structure or union
Tu peux nous donner le code de ton .h (au moins ce qu'il y a avant les fonctions) stp ?
Au fait j'ai 3 classes :
ResultatSimpleController : c'est la table View dans la quelle j'ai mes resultats sous formes de cellules.
RechercheDetailQuery : dans la quelle j'effectue ma recherche avec les détails.
WaitScreenView : la page de recherche.
RechercheDetailQuery.h
WaitScreenView.h
Bon je récapitule: si j'ai bien compris, dans ton appli tu as une liste (UITableView) et quand tu cliques sur un élément tu veux afficher une petite vue d'attente puis une vue contenant des détails sur l'élément sélectionné, c'est ça?
Si c'est bien ça, il te faudrait au moins 2 UIViewController (ou UITableViewController): 1 pour la liste de tes éléments et 1 pour la vue des détails.
Je ne sais pas ce qu'est ResultatSimpleController (puisque tu n'as pas mis le code), mais je suppose, au vu du nom, que c'est bien un UIViewController, par contre pourquoi RechercheDetailQuery n'en est pas un ?
Et du coup ta vue WaitScreenView (qui d'ailleurs porte mal son nom puisque c'est un viewController, mais ça c'est une autre histoire), tu voudrais l'afficher par dessus ta liste (ResultatSimpleController) ou par dessus te détails (RechercheDetailQuery) ?
Le ResultatSimpleController c'est un UITableViewController avec des cellules, quand je clique sur une des cellules j'appelle RechercheDetailQuery qui elle fait la recherche de ces détails (analyse des fichers XML) aprés c'est une autre classe qui affiche ces détails.
Mon problème est dans la transition entre Resultat et RechercheDétail (qui n'a pas de fichier .xib) : je voudrais afficher le WaitScreen quand j'appelle cette dernière. Le WaitScreen je l'appelle dans Recherche Détail mais normalement s'affiche au dessus de la TableView
Pour le résoudre je te propose cette solution:
Il faudrait que ton ResultatSimpleController ne soit plus un UITableViewController mais un UIViewController qui respecte les protocols UITableViewDataSource et UITableViewDelegate. il faudrait également que ce controller ait un attribut UITableView qui soit ajouté à la vue de ce controller par addSubview. Ainsi la view de ton ResultatSimpleController ne sera pas une UIScrollView mais une UIView classique qui contient une UIScrollView, et donc quand tu ajouteras ton WaitScreenView.view quand tu le faisais avant, elle s'ajoutera par dessus la scrollView et non pas dans la scrollView!
Si t'as pas compris ce que j'ai dit (car c'est ptet clair que dans ma tête :P) hésite pas à me redemander.
Au fait, je préfererais que tu me tutoies si ça ne te dérange pas
Par contre, j'ai 1 petite question : comment je fais pour que mon ViewController respecte les protocols ?
après il faut que tu implémentes les méthodes "required" de ces deux protocols (regarde dans la doc). Mais normalement si tu avais un UITableViewController, c'est déjà fait!
PS : ;D J'ai fais exactement ça dans mon appli sauf que moi c'est du bol
Sinon, quelqu'un aura des infos sur la propriété frame d'un UIView, elle sert à quoi et comment l'utiliser ?
Bonne journée,
Comment devrais-je faire pour qu'il me positionne un Cell au milieu de l'écran automatiquement grâce à cette méthode -CGRectMake(x, y, width, height) autrement dit, il faut attribuer quoi comme valeurs à x et y ?
Pour les 2 autres attributs, je sais les valeurs par quoi je dois remplir
Si c'est pour le positionner au milieu de la vue de ton viewController tu peux te baser sur la taille de la vue pour calculer ton x et ton y :
et si j'ai besoin de me baser sur la position de la vue, comment faire ?
Tu connais la taille du grand rectangle.
Tu connais son origine.
Tu connais la taille du petit rectangle.
Je cherche à déterminer la position d'un UITableView (qui du coup n'est pas fixe car on peut scroller et donc sa position change).
avec ce code on j'arrive à avoir la taille :
En gros, comment faire pour remplacer le size par la position .
Merci