J'ai un utableview avec 8 cellules (sections) au total dans lesquelles 6 d'entre elles contiennent des champs de texte en tant que sous-visions et sur 2 un bouton contenant un bouton et l'autre contenant de la vue texte.now j'ai un problème ici, car nous sommes tous conscient que, lorsque jamais la vue apparaît uniquement, les cellules visibles sont chargées lorsque mon application est chargée, je suis capable de visualiser 5 cellules, les premiers 4 champs de texte contenant et la 5ème cellule avec la touche.Je peut voir le nombre de matrices est 4 Lorsque je l'ai affiché via la console de la console, c'est-à-dire maintenant après le défilement de la vue Table, je peux observer les éléments suivants: p> donc, Ce qui se passe est que je dois enregistrer les données saisies dans la vue Tableau ou dire Modifier pour apporter des modifications aux données existantes, je suis obligé de faire défiler la vue Table de la table et entrez les valeurs de la dernière cellule aussi. avec l'utilisateur parce que nous ne pouvons pas nous attendre à ce qu'il / elle fait défiler la vue Table de la table et entrez les entrées complètes du formulaire de formulaire / View de la table. Qu'est-ce qui change de temps qu'il / elle fait, ils vont et cliquez simplement sur Terminé. Ave qu'est-ce que c'est ...! p> Plus sur je suis une vue de choix comme une vue d'entrée pour la dernière cellule contenant du champ de texte comme Sous-site.hence dans ma vue de choix sélectionnée Méthode de la ligne, je suis confronté à un problème de crash avec Dernière cellule / section (Textfield en tant que sous-visView) contenant une vue de choix ici est mon extrait de code de code pour la méthode: p> Je me demande pourquoi quelques fois après avoir sélectionné les valeurs de la vue de choix (dernier La cellule de section) s'écrase parfois et parfois fonctionne bien. Peu de temps, il se bloque à la ligne ci-dessus commenté dans Case 107 Strong>, quelques fois dans la piscine Autoréleuillet principal.Some Time Fil comme indiqué dans Snap ci-dessous: p> y a-t-il de même que nous pouvons Chargez toutes les cellules à la fois afin que tous les champs de texte soient ajoutés au tableau avant de faire défiler. Il ne peut y avoir aucun problème, je ne peux pas être un problème, je pense que P> code modifié plus détaillé pour la compréhension: strong> p> J'ai fait plusieurs tentatives de découvrir quel ex ACTLY IL va mal aussi j'ai vérifié certaines questions ici et Il y a .Mais ne pouvait trouver aucune efficacité / env. Réponse ou qui résout mon problème. P> Alors tout le monde, aidez-moi avec des suggestions précieuses ou des échantillons d'extraits de code. P> Merci tout à l'avance :) P> P>
p>
4 Réponses :
Il serait logique qu'il y aura beaucoup de problèmes de la manière dont vous construisez la forme (qui est en fait le cas) Ce que je faisais moi-même lorsque j'ai besoin de construire un tel formulaire consiste à utiliser une vue normale avec toutes les commandes, quel que soit le long, il s'agit de cette forme dans une vue de défilement et définir sa taille de contenu avec la taille de la vue. en elle. Cela vous laisserait avoir plus de contrôle sur la façon dont vous voulez ce formulaire. Et je ne pense pas avoir vu une application à l'aide d'une vue de table pour une entrée de formulaire. p>
Vous pouvez utiliser l'interface Builder pour construire votre formulaire (juste tricher sur xcode et faire la vue principale et le défilement Vew assez grand pour que vous puissiez tout voir sur le constructeur, puis le redimensionner à la taille appropriée lorsque vous avez terminé) < / p>
Merci beaucoup M.HAB Amer, mais je ne suis pas au courant de la façon de réaliser ce que vous avez dit.can vous me suggérez un didacticiel ou un code d'exemple où je peux le prendre comme référence et mettre en œuvre la même chose, merci d'avance :)
Pourriez-vous fournir plus d'informations sur le formulaire que vous essayez de construire? Je vais essayer de donner un pas à pas. Vous pouvez rechercher "Tutoriels d'interface Builder" sur Google si vous n'êtes pas à l'aise avec l'interface Builder.
@Ehabamer Pas de problème M.HAB, je suis au courant de l'interface constructeur glisser-déposer, prenez soin de vous, merci encore une fois :)
En réalité, sur l'application Préférences d'Apple, ils utilisent des visites groupées pour l'entrée.
J'aurais peut-être mal compris mais non d'entre eux est utilisé pour créer un formulaire d'inscription, juste pour la navigation, à l'exception des contrôles ON / OFF. mais non comme champ de texte
Que se passe-t-il, c'est que UitailView ne charge que les cellules visibles et tout le temps que l'utableview est défilé, le rappel Appelez comme ceci: p> alors vous pouvez appeler exactement le contrôleur souhaité. Et vous devez contrôler le comportement de votre utableview chaque fois qu'il est défilé. Comme ceci: p> sur le sélecteur. Cela ne fonctionne probablement qu'une fois que vous avez défilé toute table, car il fait référence à un champ de texte qui ne sera ajouté que dans la matrice une fois que la cellule correspondante est visible. P> Il n'y a pas beaucoup plus à faire. Mais suivez cela et vous devriez aller bien. Premièrement, Sous-classe UitailviewCell. Vous pouvez créer vous-même les commandes de manière programmatique ou avec une XIB. Cela vous donnera plus de contrôle sur les cellules elles-mêmes. À propos du cueilleur, au lieu de créer un tableau avec des contrôles, créez-le avec les valeurs qu'il aurait dû. Une fois que quelqu'un a dactylographié quelque chose, enregistrez-le à l'aide de l'UITEXTFIELDELEGATE.
J'espère que cela aide. P> EDIT: P> Vous devez créer une sous-classe de l'UitailViewCell. Sur Xcode, créez un nouveau fichier. Sélectionnez la classe Objective-C. Sur l'écran suivant, sur la sous-classe de champ de, sélectionnez UitablesViewCell et nommez votre cellule en conséquence. Cela créera une classe qui remplacera le comme ceci: p> CellfornorTindexPath: code> est appelé. Mais laissez-moi obtenir ce droit. Pourquoi avez-vous besoin d'une vision utile pour faire un formulaire? Et comme je peux le voir, vous chargez une cellule par section ... et vous n'initialisez que la cellule. Ce que tu devrais faire. Sous-classe uableviewCellez et créez vos objets là-bas. initwithstyle: réutilisateur: code> méthode. À l'intérieur de cette méthode, vous devez mettre votre code init. P>
Merci Raphael Ayres, mais je n'ai pas complètement compris "/ * Cela devrait être fait dans la méthode de la cellule personnalisée" peut-on éditer mon poste en conséquence, merci :)
Oh k M.Raphael, merci pour toute la préoccupation, mais juste un petit doute, après avoir mis en œuvre la même extrait de code dans l'édition de la partie de votre réponse, le reste de la mise en œuvre ci-dessus de la mine reste identique à l'exception des modifications de la méthode init ... droit?
Oui. Mais vous devez également contrôler les cellules quand ils existent déjà. Si la cellule est nulle, créez-la, sinon, contrôlez son contenu. Quelque chose que vous devriez changer est les tableaux. Comment soumettez-vous les valeurs?
Mais lorsque je sous-classe l'UitailViewCell, je reçois plusieurs erreurs, comme définir le titre de la barre de navigation, la barre droite, les éléments de boutons de barre gauche, etc. :(
Êtes-vous sûr que vous êtes sous-classement utableviewCell et non utablementview? Où as-tu ces erreurs? Dans quelle partie du code? Ceux que vous avez signalés ne sont pas obligatoires à définir. En fait, ils n'existent même pas dans un uableviewcell. Alors, signalez-moi à l'erreur afin que je puisse vous aider davantage.
Désolé, Mr.RAPHAEL, j'utilise la vue de défilement, beaucoup d'entre eux ont suggéré d'utiliser la vue de table au lieu de faire défiler la vue pour un formulaire
On dirait que vous pourriez être mieux à ne pas utiliser une vue de table, mais à l'aide d'une vue de défilement à la place. Si vous avez vraiment une quantité réparée de choses que vous allez afficher, vous pouvez simplement les mettre sur une vue de défilement comme des vues (au lieu de cellules de table) et votre code obtiendra beaucoup plus simple. P>
Si ce que vous voulez sortir de la vue de la table est juste l'apparence, vous pouvez simplement utiliser une image d'arrière-plan qui ressemble à la façon dont vous le souhaitez et superposez les vues et les contrôles sur cette arrière-plan. Vous devriez être capable de faire tout cela dans l'interface Builder. p>
Si vous prenez cette approche, le code dans votre contrôleur d'affichage sera désormais ce que vous devez gérer la saisie de texte et appuyez sur la touche, et vous n'avez pas à vous soucier de vous inquiéter d'un délégué ou d'une source de données. p>
Oh, je l'ai déjà fait en utilisant Scroll View.But Beaucoup ont suggéré qu'il s'agissait d'une mauvaise approche de programmation et de ladite "View de table d'utilisation à la place" .hence J'ai commuté mon approche de codage de Uiscrollview vers uableview.so comme vous avez dit que je vais mettre en œuvre la même chose et revenir à vous, merci beaucoup
Salut M.Mike Je ne comprends pas la raison pour laquelle ma vue de défilement n'est pas défilante.Je ont mis en œuvre la même chose ce que vous avez suggéré et mis en œuvre le même code dans ce lien: Rosetindia.net/Tutorial/Iphone/Tutorial/Iphone/... .mais le problème survolé, lors de la recherche de des questions concernant le même ex: Stackoverflow.com/questions/3608949/... a suggéré de définir la taille du contenu, même si j'étais incapable d'atteindre le défilement.fr vous s'il vous plaît suggérer. moi ce qui ne va pas!
Bien que cela semble être déjà résolu, ce qui aurait pu faire en tant que «sale bidouillage» consiste à faire défiler toute la table jusqu'au fond avant d'effectuer une opération. Quelque chose comme [myTableView ScrolltorowTindExpath: indénitation Atscrollposition: UitailviewscrollpositionBottom Animation: Oui]; Code> De cette façon, il serait obligé de charger tout l'uitablecellview. N'oubliez pas que cela n'est pas préféré, mais peut travailler en cas de changement de code minimal est requis. P>
Je ne crois pas qu'il soit possible de charger des cellules qui ne sont pas visibles. La table tirera des données de la source de données et ne chargera que les cellules visibles. Les autres cellules seront chargées pendant que vous faites défiler et ils deviendront visibles.
Où faites-vous une nouvelle cellule si elle n'existe pas
@Billburgess merci Mr.Burgess à ma connaissance savait également ce que vous avez dit. Mais je suis confronté à beaucoup de problèmes à cause de cela, car sans modifier ou toucher la dernière cellule après le défilement, je ne parviens pas à mettre à jour les données sans faire cela.Aso dire que si l'utilisateur entre dans la vue Table de la table, peuplé avec les données saisies à ce moment-là. Soignez-vous si l'utilisateur modifie avec désinvolture les 2 premières cellules et clique sur Terminé. Il envisage des valeurs du dernier champ (invisible) comme étant Nil même s'il y a des valeurs.
@fibnochi Veuillez consulter le code sous "Code édité plus détaillé pour comprendre:", là dans chaque cas, je crée une nouvelle cellule si elle n'existe pas
Vous devez travailler de ivars et la source de données pour sauvegarder et mettre à jour plutôt que les valeurs des cellules. Économisez de là, de cette façon s'ils ne visualisent jamais vos cellules hors écran, les valeurs sont toujours là.
@Billburgess Je ne suis pas au courant des ivars, pouvez-vous me suggérer un didacticiel ou un exemple de code, merci :)