im essayant de mettre en œuvre un utableview avec la structure suivante: p>
Et il devrait scanner comme cette capture d'écran (1-2-3-4): http://dl.dropbox.com/u/2213241/ittableview.png p>
Donc, toujours deux sections sont visibles. P>
Comment puis-je implémenter cela? Ou quelqu'un a-t-il déjà mis en œuvre cela? P>
merci :) p>
3 Réponses :
sous-classement utableview code> serait une bonne option, comme Robin suggéré. J'ai fait quelque chose de similaire à cela moi-même, mais j'ai sous-classé
utableviewcell Code> et placé
utableview code> s à l'intérieur d'eux. Dans ce cas, vous auriez une table de baseviette où chaque section serait un groupe. Chaque ligne, car votre sous-classe
utableviewCell code> est alors son propre
utableview code>, qui a ses propres sections et lignes. Cela devrait vous donner le look et la fonctionnalité que vous recherchez. Je serais heureux d'aider à la configurer si vous avez du mal à le faire en place, mais ce n'est pas trop difficile à faire. Ce didacticiel donne un bon exemple sur la sous-classe
UitailViewCell code> et est un bon endroit pour commencer p>
Quelque chose comme ça: iOSSTFF.WordPress.com / 2011/06/29 / ... ?
Yup, cela devrait fonctionner très bien. Il peut également être fait par programmation si vous ne voulez pas utiliser IB. Il suffit de configurer votre site WebView et d'autres variables dans votre fichier d'en-tête et créez la tableView dans votre initwithstyle de votre cellule personnalisée: réutilisateur: code> méthode. Le reste du code sera le même, mais c'est ainsi que vous allez y aller si vous ne voulez pas créer de fichier NIB pour votre cellule personnalisée.
C'est quelque chose d'intéressant et de créativité imo. Merci d'avoir partagé
Le truc pour avoir des sections imbriquées est d'avoir deux types de lignes dans la vue Table. Un pour représenter le deuxième niveau de sections et une autre pour représenter les lignes normales dans la tableView. Disons que vous avez un tableau de deux niveaux (disons des sections) pour représenter les éléments de votre vue table.
Ensuite, le nombre total de sections que nous avons n'est que du nombre de sections de niveau supérieur. Le nombre de lignes dans chaque section de niveau supérieur serait le nombre de sous-sections + le nombre de lignes dans chaque sous-section. P> maintenant, tout ce que nous devons penser à faire Créez les lignes pour la vue de la table. Configurez deux prototypes dans le storyboard avec des identifiants de réutilisation différentes, une pour l'en-tête de section et une autre pour l'élément de ligne et simplement instancier la bonne sur la base de l'index de la source de données dans la méthode source de données. P> - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSMutableArray *sectionItems = self.sections[(NSUInteger) indexPath.section];
    NSMutableArray *sectionHeaders = self.sectionHeaders[(NSUInteger) indexPath.section];
    NSIndexPath *itemAndSubsectionIndex = [self computeItemAndSubsectionIndexForIndexPath:indexPath];
    NSUInteger subsectionIndex = (NSUInteger) itemAndSubsectionIndex.section;
    NSInteger itemIndex = itemAndSubsectionIndex.row;
    if (itemIndex < 0) {
        // Section header
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SECTION_HEADER_CELL" forIndexPath:indexPath];
        cell.textLabel.text = sectionHeaders[subsectionIndex];
        return cell;
    } else {
        // Row Item
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ROW_CONTENT_CELL" forIndexPath:indexPath];
        cell.textLabel.text = sectionItems[subsectionIndex][itemIndex];
        return cell;
    }
}
- (NSIndexPath *)computeItemAndSubsectionIndexForIndexPath:(NSIndexPath *)indexPath {
    NSMutableArray *sectionItems = self.sections[(NSUInteger) indexPath.section];
    NSInteger itemIndex = indexPath.row;
    NSUInteger subsectionIndex = 0;
    for (NSUInteger i = 0; i < sectionItems.count; ++i) {
        // First row for each section item is header
        --itemIndex;
        // Check if the item index is within this subsection's items
        NSArray *subsectionItems = sectionItems[i];
        if (itemIndex < (NSInteger) subsectionItems.count) {
            subsectionIndex = i;
            break;
        } else {
            itemIndex -= subsectionItems.count;
        }
    }
    return [NSIndexPath indexPathForRow:itemIndex inSection:subsectionIndex];
}
J'ai le problème similaire, mais un niveau plus de toute aide est d'apprécier Stackoverflow.com/q/45626816/6028575
Si quelqu'un est intéressé par une version SWIFT 4.2 du code ci-dessus, c'est.
Pour avoir des sections imbriquées, vous devez disposer de plusieurs types de lignes dans votre TableView. Premièrement, représenter le deuxième niveau de sections et deuxième pour représenter les lignes standard de votre site WebView. Disons que vous avez un tableau à deux niveaux (sections) pour représenter les éléments de votre site WebView. P>
Ensuite, le nombre total de sections que nous avons ne sont que le nombre de sections de niveau supérieur. Le nombre de lignes dans chaque section de niveau supérieur serait le nombre de sous-sections + le nombre de lignes dans chaque sous-section. P> maintenant, tout ce que vous devez penser est comment Pour créer les lignes pour la vision de la table. Configurez deux prototypes dans le storyboard avec des identifiants de réutilisation différentes, une pour l'en-tête de section et une autre pour l'élément de ligne et simplement instancier la bonne sur la base de l'index de la source de données dans la méthode source de données. P> func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var sectionItems = sections[indexPath.section]
var sectionHeaders = self.sectionHeaders[indexPath.section]
let itemAndSubsectionIndex: IndexPath? = computeItemAndSubsectionIndex(for: indexPath)
let subsectionIndex = Int(itemAndSubsectionIndex?.section ?? 0)
let itemIndex: Int? = itemAndSubsectionIndex?.row
if (itemIndex ?? 0) < 0 {
// Section header
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "SECTION_HEADER_CELL", for: indexPath)
cell.textLabel?.text = sectionHeaders[subsectionIndex] as? String
return cell
} else {
// Row Item
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "ROW_CONTENT_CELL", for: indexPath)
cell.textLabel?.text = sectionItems[subsectionIndex][itemIndex ?? 0] as? String
return cell
}
}
func computeItemAndSubsectionIndex(for indexPath: IndexPath?) -> IndexPath? {
var sectionItems = sections[Int(indexPath?.section ?? 0)]
var itemIndex: Int? = indexPath?.row
var subsectionIndex: Int = 0
for i in 0..<sectionItems.count {
// First row for each section item is header
itemIndex = (itemIndex ?? 0) - 1
// Check if the item index is within this subsection's items
let subsectionItems = sectionItems[i] as? [Any]
if (itemIndex ?? 0) < Int(subsectionItems?.count ?? 0) {
subsectionIndex = i
break
} else {
itemIndex -= subsectionItems?.count
}
}
return IndexPath(row: itemIndex ?? 0, section: subsectionIndex)
}
Comment les variables sont-elles déclarées? Pouvez-vous donner un exemple?
Eh bien, ma question est que vous voulez mettre en œuvre quelque chose comme ça?
Oui j'ai essayé de la mettre en œuvre mais j'ai pu comprendre comment. Donc, je croyais que quelqu'un plus intelligent que moi ait une idée;)
Ce n'est pas difficile à réaliser, mais pas aussi simple, peut être que vous pouvez commencer par sous-classement de la vue utilitaire et poster une question connexe