Question

J'ai un tableview groupé qui est rempli avec des données XML dans une section. Ce que je voudrais faire est de créer une autre section avant les données conduit un, et appliquer une action à elle.

Exemple:

L'utilisateur est présenté avec un bouton qui dit « utiliser votre emplacement actuel » (section créée manuellement) et au-dessous une liste des pays, l'utilisateur peut également choisir de choisir parmi (données section entraînée)

Utilisez le menu des paramètres comme guide. Il y a quelques options qui sont une seule ligne dans une section, ils semblent être un bouton ...

Si cela n'a pas de sens, je vais essayer de l'expliquer mieux.


J'ai donc ces deux lignes évidentes de code assez simple ...

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}    
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        return [countrysData count];
    }

Ce que je voudrais est d'avoir numberOfSectionsInTableView retour 2 et avoir la première « section » dire « Cliquez pour utiliser votre emplacement actuel » qui serait alors pousser en vue d'une carte, et la seconde section affiche la liste des pays que j'ai actuellement travail.

Était-ce utile?

La solution

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    if(section == 0){
        return 1;
    }else{
        return [countrysData count];
    }
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 2;
}   

alors vous devez choisir ce qu'il faut faire dans votre didSelectRowAtIndexPath: méthode en raison de la indexPath.section. oh, et vous devriez vérifier dans votre indexPath.section cellForRowAtIndexPath: méthode.

Autres conseils

Il vous suffit de mettre à jour toutes vos implémentations des protocoles UITableViewDataSource et UITableViewDelegate pour tenir compte de manière appropriée pour la nouvelle section et sa ligne (s).

Par exemple, voici comment mettre à jour numberOfSectionsInTableView: , tableView: numberOfRowsInSection: et tableView: cellForRowAtIndexPath: , mais vous voudra mettre à jour au moins t ableView: didSelectRowAtIndexPath: ainsi:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    // calculate the number of sections of non-data (might just be 1)    
    // calculate the number of sections for the data (you were already doing this, might just be 1)
    // return the sum
    return 1 + 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    NSInteger rowCount = 0;
    switch (section) {
    case 0:
        // non-data section has 1 row/cell
        rowCount = 1;
        break;
    case 1:
        // data section uses an array
        rowCount = [dataArray count];
        break;
    }
    return rowCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *nonDataCellID = @"NonDataCell";
    static NSString *dataCellID = @"DataCell";
    UITableViewCell *cell;

    int section = [indexPath indexAtPosition:0];
    int row = [indexPath indexAtPosition:1];

    switch (section) {
        case 0:
            // or you can just use standard cells here
            cell = [tableView dequeueReusableCellWithIdentifier:nonDataCellID];
            if (cell == nil) {
                [[NSBundle mainBundle] loadNibNamed:@"NonDataCell" owner:self options:NULL];
                cell = nonDataCell; // nonDataCell is an IBOutlet to this custom cell
            }

            // configure non-data cell here (use tags)
            UILabel *someLabel = (UILabel*)[cell viewWithTag:1];
            someLabel.text = @"Non-data cell";
            break;

        case 1:
            // or you can just use standard cells here
            cell = [tableView dequeueReusableCellWithIdentifier:dataCellID];
            if (cell == nil) {
                [[NSBundle mainBundle] loadNibNamed:@"dataCell" owner:self options:NULL];
                cell = dataCell; // dataCell is an IBOutlet to this custom cell
            }

            // configure data call here (using "row")
            UILabel *someDataLabel = (UILabel*)[cell viewWithTag:1];
            someDataLabel.text = [[dataArray objectAtIndex:row] valueForKey:@"name"];
            break;
       }

    return cell;
}

Je suis sûr que vous pouvez modifier le retour de la méthode de UITableViewDataSource « de numberOfSectionsInTableView: » à la volée. Une fois que l'utilisateur sélectionne le choix d'une section supplémentaire, vient de mettre un drapeau pour avoir la méthode retourne le nombre de tables que vous voulez. Ensuite, vous forcer un rechargement de la table et vous devriez voir la nouvelle section.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top