didSelectRowAtIndexPath à l'article
J'ai un UITableView qui j'ai attribué les sections. Lors de l'utilisation de didSelectRowAtIndex avec indexPath.ligne je ne suis pas d'obtenir la valeur correcte. Disons que je suis dans la section 2, puis il commence à la ligne d'index à 0 et, par conséquent, je suis le mauvais indice.
Quelqu'un peut me dire comment résoudre ce problème? Je me rends compte qu'il est possible d'obtenir la section de l'index par indexPath.section mais je ne peux pas comprendre comment les utiliser.
bandDetailViewController.band = [self.programArray objectAtIndex:indexPath.row];
J'espère que vous pourrez m'aider. Merci d'avance 🙂
EDIT:
Des données de l'échantillon. Mes cellules pour l'affichage de la table est chargé de cette plist.
<array>
<dict>
<key>name</key>
<string>Alphabeat</string>
<key>description</key>
<string>Long description.</string>
<key>scene</key>
<string>Store Scene</string>
<key>date</key>
<date>2011-02-04T20:09:40Z</date>
<key>hasDate</key>
<true/>
<key>weekDay</key>
<string>Onsdag</string>
<key>youtubeVideo</key>
<string>http://www.youtube.com/watch?v=dB01PTZNpBc</string>
</dict>
<dict>
<key>name</key>
<string>Anne Linnet</string>
<key>description</key>
<string>Long description.</string>
<key>scene</key>
<string>Store Scene</string>
<key>date</key>
<date>2011-02-04T20:09:40Z</date>
<key>hasDate</key>
<true/>
<key>weekDay</key>
<string>Onsdag</string>
<key>youtubeVideo</key>
<string>http://www.youtube.com/watch?v=jWMSqS7fL9k</string>
</dict>
</array>
OriginalL'auteur simonbs | 2011-02-07
Vous devez vous connecter pour publier un commentaire.
La
rows
ne sont pas consécutifs et commencer à partir de zéro à chaquesection
:section 0:
la ligne 0
la ligne 1
ligne 2
rangée ...
section 1:
la ligne 0
la ligne 1
ligne 2
rangée ...
...
La meilleure façon est de construire un NSMutableArray sections avec NSMutableArrays pour les lignes. Que vous le code devient très facile:
EDIT:
Juste un exemple:
programArrayIndex
qui contient mes sections. Alors j'ai un tableau appeléprogramArray
qui contient mes cellules. J'utiliseNSPredicate
surprogramArray
pour filtrer les entrées, je veux montrer dans la cellule. Ce prédicat est stockée en tant queweekDays
. Alors maintenant, j'aiprogramArrayIndex
contenant l'en-tête etweekDays
contenant chaque cellule, je veux montrer. Maintenant, ce que je veux faire?Hmmm, j'ai peur que le mieux serait que vous réorganisez vos tableaux. Ne pas utiliser deux tableaux distincts pour les sections et les lignes. Faire un tableau avec vos sections et à l'intérieur de ce tableau, chaque section dispose d'un tableau avec les lignes. Vous verrez que c'est très confortable 🙂
Pourriez-vous nous donner un exemple? Maintenant, j'ai nettoyé mon code ne contiennent que le
programArray
qui mes données sont chargées à partir d'un fichier plist. Le plist est chargéNSString *path = [[NSBundle mainBundle] pathForResource:@"Bands" ofType:@"plist"];
et affecté à un tableau temporaireNSMutableArray* tmpArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
et puisprogramArray
est "hériter" le tableau temporaireself.programArray = tmpArray;
Alors maintenant, je voudrais mettre les entrées dansprogramArray
avec unweekDay
de "samedi" sous l'entrée "samedi" dans un tableau, à droite?- Je modifier ma réponse et vous donne un exemple de mon CellSection et CellElement. Le CellSection contient un NSMutableArray avec les lignes (=CellElement).
Merci beaucoup pour votre aide. J'ai fini par sauver mes articles comme des dictionnaires dans un dictionnaire. Et sous chaque article j'ai stocké mes lignes que des dictionnaires. Vous avez été d'une grande aide!
OriginalL'auteur Manni
Je viens de tomber sur cette question. J'ai trouvé une solution en utilisant le numéro de l'article comme vous l'avez mentionné, Le code suivant utilise enchaîne à naviguer à nouveau controlView à partir de deux sections différentes avec deux lignes différentes. Solution TRÈS simple!
OriginalL'auteur DCorrigan
J'ai eu le même problème et je l'ai résolu de cette façon:
}
}
Espère que cela aide 🙂 Cheers!
OriginalL'auteur Goblin
Si je vous suis bien, vous pourriez essayer
Ou quelque chose comme ça. Plus généralement, vous aurez un tableau d'objets qui représentent vos sections, et chacune de ces objets section aura son propre tableau représentant ses lignes.
Au lieu de tableaux de tableaux de dictionnaires avec indexPaths comme la clé pourrait être utile
OriginalL'auteur Nick Curran
L'approche habituelle de traiter avec longueur variable sections (qui je suppose est le cas ici) est de créer une collection qui représente les sections contenant les collections imbriquées pour représenter les lignes. Ainsi, par exemple, vous pourriez avoir un haut niveau
NSMutableArray
de l'article de valeurs, où chaque élément est uneNSMutableArray
des valeurs de ligne.MODIFIER
Compte tenu de la structure actuelle de votre plist de données, une autre approche serait de filtrer le tableau à l'aide d'une instance de
NSPredicate
. Par exemple, le code suivant devrait filtrer les lignes pour la section en cours basé sur les jours de la semaine:Noter que vous aurez également besoin de modifier
tableView:numberOfRowsInSection:
à utiliser le même mécanisme, de sorte qu'il serait de retour le bon nombre de lignes pour chaque section.weekDays
) contient les jours de la semaine et ensuite je dois mettre les répertoires à partir de la plist qui correspond à la date donnée dans le droit d'entrée dansweekDays
. Donc, tous les répertoires oùdayOfWeek = Saturday
passe sousSaturday
dans la gammeweekDays
. Je blieve qu'est ce que tu veux dire, je ne vois pas comment il devrait être fait.Sans avoir aucune idée de ce que votre apparence des données, il est impossible de dire. Pouvez-vous fournir des exemples de données, ou au moins de décrire ce que les sections et les lignes représentent les dans votre tableView?
J'ai mis à jour mon premier post pour montrer certains sampla de données. Les sections sont les jours de la semaine et les cellules sont des groupes qui jouent de la journée (la demande est pour un festival) Dire que les Beatles et La Reine assistent à la fête. Les Beatles allaient jouer le jeudi et de la Reine jouera samedi. Ensuite, ils seront énumérés dans la section "jeudi" et "samedi".
Merci beaucoup pour votre aide. J'ai fini par sauver mes articles comme des dictionnaires dans un dictionnaire. Et sous chaque article j'ai stocké mes lignes que des dictionnaires. Vous avez été d'une grande aide!
Mon plaisir. 🙂
OriginalL'auteur jlehr
Si vous avez mis en œuvre
tableview cellForRowAtIndexPath
puis dans le
didSelectRowAtIndexPath
vous pouvez appeler cette méthode pour récupérer la valeur sélectionnée. Pas besoin de réorganiser vos structures de données si c'est trop dur. Ses ce que j'ai fait avec la variable longueur des sections et fonctionne très bien.NSString *selectedValue = [self tableView:theTableView cellForRowAtIndexPath:indexPath].textLabel.text;
OriginalL'auteur casey
Si vous regardez la NSIndexPath la documentation, vous pouvez voir comment le NSIndexPath structure de données est établie.
Pour obtenir le numéro de la section que vous voulez faire quelque chose comme:
Pour obtenir la ligne à l'intérieur de cette section:
row
etsection
propriétés àNSIndexPath
dans une catégorie. L'OP question n'était pas comment accéder à ces valeurs, mais sur la façon de les utiliser pour accéder à l'élément correct de la collecte correspondante.La personne parle NSIndexPath sur iOS, pas de MacOSX. Modifier votre réponse à l'adresse de ce contexte.
OriginalL'auteur Chris