Ma questionComment traiter les sections et les lignes dynamiques dans iOS UITableView
Quand je traite avec UITableView
, j'ai essentiellement un tableau table_data
avec mes sections et des lignes.
[
{
title : "section A title",
rows: [
{data: row_1_data},
{data: row_2_data}
]
},
{
title : "section B title",
rows: [
{data: row_1_data},
{data: row_2_data}
]
},
]
J'utilise heightForHeaderInSection
, cellForRowAtindexPath
, titleForHeaderInSection
, didSelectRowAtindexPath
méthodes comme celui-ci
if indexPath.section == 0 {
//section A
if indexPath.row == 0 {
//do something with table_data[0]["rows"][0]["data"]
}
elesif indexPath.row == 1 {
//do something else
}
}
if indexPath.section == 1 {
//do something for section B
}
Travailler avec des numéros 0
, 1
, etc devient un casse-tête, quand mon tableau table_data
est dynamique. Les moyens dynamiques, que certaines sections ou lignes peuvent avoir des positions différentes ou n'existent pas du tout.
Par exemple, je supprimer une section et mon tableau est
[
{
title : "section B title",
rows: [
{data: row_1_data},
{data: row_2_data}
]
}
]
Je aime ce
self.section_A_position = 0
self.section_B_position = 1
func afterRemoveSectionA() {
section_A_position = -999
section_B_position = section_B_position - 1
//write here another new sections for -1
}
Ajouter une autre section C comme 0 élément
self.section_C_position = -999
func afterAddSectionC() {
section_C_position = 0
section_A_position = section_A_position + 1
section_B_position = section_B_position + 1
}
Et puis utilisez section_positions
dans les fonctions
if indexPath.section == section_A_position {
//section A
if indexPath.row == 0 {
//do something with table_data[0]["rows"][0]["data"]
}
elesif indexPath.row == 1 {
//do something else
}
}
if indexPath.section == section_B_position {
//do something for section B
}
Cela semble assez simple, mais lorsque j'ai de nombreuses sections et de nombreux cas pour le masquer ou le déplacer dans un tableau, il devient difficile de contrôler et d'ajouter de nouveaux types de sections. Parfois, je crée un tableau section_positions_map
pour le stocker ensemble et faire l'opération +1
, -1
en boucle. Mais cela n'aide pas, il est toujours difficile de l'organiser dans chaque TableViewController, quand j'ai besoin de ce comportement.
Question
connaissez-vous des approches ou des cadres qui font de cette partie plus facile?
Mes Idées
- Ajouter
type
propriété à mes dictionnaires
{
title : "section A title",
rows: [
{data: row_1_data},
{data: row_2_data}
]
type : "section_a"
}
et vérifier if table_data[0]["type"] == "section_a"
(ou utiliser enum
pour recueillir types)
- Sous-classe my Dictionar y et vérifier
if table_data[0] is SubClassSectionA
mais les deux semble laid pour moi.
Merci pour votre réponse. C'est une façon intéressante. Mais que faire si j'ai un comportement différent pour rowData dans une section? –
La fonction rowData.tapHandler peut être différente pour chaque objet ligne. Vous pouvez mettre là tout ce que vous voulez. –