在我的分段tableview中的哪一行? [英] Which row in my sectioned tableview?

查看:71
本文介绍了在我的分段tableview中的哪一行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

一方面,我有一个女巫,根键是一个包含12个项目的数组。
在第二只手中,我有一个分段的tableview(有3个部分MOTIF-COULEUR-OTHER)
我想要的是tableview正确显示部分中的数据。
在第一部分我希望在第二部分有我的plist
的项目0,1,2,3我希望有项目4,5,6,7,8,9,10我的plist
在最后一节我希望有11& 12

In one hand, I've got a plist in witch the root key is an array with 12 items. In the second hand, i've got a sectioned tableview (with 3 sections MOTIF-COULEUR-OTHER) What i want is that the tableview display correctly the datas in the sections. in the first section i want to have items 0,1,2,3 of my plist in the second section i want to have items 4,5,6,7,8,9,10 of my plist in the last section i want to have the items 11 & 12

可能它真的很简单,但它只是让我感到烦恼

May be it's really simple, but it just made me crasy

她的我的RootViewController.h& .m

her's my RootViewController.h & .m

.h

//
//  RootViewController.h
//  FichesRaces
//
//  Created by a3116b on 28/05/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface RootViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> {
        NSArray *tabWebSites;


}

@property (nonatomic, retain) NSArray *tabWebSites;








@end

.m

//
//  RootViewController.m
//  FichesRaces
//
//  Created by a3116b on 28/05/11.
//  Copyright 2011 __MyCompanyName__. All rights reserved.
//

#import "RootViewController.h"
#import "CatsList.h"
#import "DetailViewController.h"

@implementation RootViewController
@synthesize tabWebSites;







- (void)viewDidLoad {
    [super viewDidLoad];

    // Charger le fichier .plist dans un tableau que l'on appelera  arrayFromFile
    NSString *path = [[NSBundle mainBundle] pathForResource:@"cats" ofType:@"plist"];
    NSDictionary *dictFromFile = [[NSDictionary alloc] initWithContentsOfFile:path];
    NSArray *arrayFromFile = [dictFromFile objectForKey:@"Root"];

    // Créons un tableau temporaire que nous allons remplir avec un objet Website par NSDictionnary contenu dans le fichier .plist
    // Notez l'utilisation de NSEnumerator pour parcourir un tableau
    NSMutableArray *websitesToAdd = [[NSMutableArray alloc] init];
    NSEnumerator *enumerator = [arrayFromFile objectEnumerator];
    NSDictionary *anObject;
    while ((anObject = [enumerator nextObject])) {
        CatsList *cl = [[CatsList alloc] initWithDictionaryFromPlist: anObject];
        [websitesToAdd addObject: cl];
        [cl release];
    }

    // Remplir la propriété tabWebSites avec le contenu du NSMutableArray précédent
    self.tabWebSites = [NSArray arrayWithArray:websitesToAdd];

    // Gestion de la mémoire : pour chaque alloc, n'oubliez pas le release qui va avec !
    [websitesToAdd release];
    [arrayFromFile release];
}




- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
}



- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    if ( section == 0 ) return @"Les Motifs";
    if ( section == 1 ) return @"Les Couleurs";
    if ( section == 2 ) return @"Bon à Savoir";

    return @"";

   // return [sectionHeaders objectAtIndex:section];
}






// Customize the number of sections in the table view.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return 3;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case 0:
            return 4;
            break;

        case 1:
            return 13;
            break;

        default:
            return 3;
            break;
    }

   }





// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    if (indexPath.section == 2) {
        CellIdentifier = @"cell";
    }


    // Les cellules sont mises en cache pour accélérer le traitement, sous l'identifiant "Cell",
    // on essaie récupère ce modèle de cellule s'il est déjà en cache
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    // Si on n'a pas réussi à sortir une cellule du cache, on crée un nouveau modèle de cellule
    // et on l'enregistre dans le cache
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];



     /*    (indexPath.section == 0 && indexPath.row ==0);
         (indexPath.section == 1 && indexPath.row == 5);
         (indexPath.section == 2 && indexPath.row == 13);*/

   /*     //-----------------------------------------------

        NSUInteger sectionNumber = [indexPath section];
        NSUInteger rowNumber = [indexPath row];  

        // determine the correct row.
        // it will be restarted from 0 every time, and as
        // we're just loading in from one array, we need to
        // offset it by the right amount depending on the section.
        //  int sectionNumber = indexPath.row;
        if ( sectionNumber == 0 ) rowNumber = 4;
        if ( sectionNumber == 1 ) rowNumber = +5;
        if ( sectionNumber == 2 ) rowNumber = +18;


        //-----------------------------------------------   */


    }





    // On récupère l'objet Website qui correspon à la ligne que l'on souhaite afficher
    CatsList *cl = [self.tabWebSites objectAtIndex:indexPath.row];

    // On configure la cellule avec le titre du site et sa description
    cell.textLabel.text = cl.TITLE;
    cell.detailTextLabel.text = cl.DESCRIPTION;


    //important ajouter signalisation sinon APP REFUSE

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // On renvoie la cellule configurée pour l'affichage
    return cell;
}



/*- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.section == 3) {
        return nil;
    }
    return indexPath;
}*/





- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{



    DetailViewController *detailVC = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
    detailVC.CL = [self.tabWebSites objectAtIndex:indexPath.row];

    [self.navigationController pushViewController:detailVC animated:YES];
    [detailVC release];
}






- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Relinquish ownership any cached data, images, etc that aren't in use.
}

- (void)viewDidUnload
{
    [super viewDidUnload];

    // Relinquish ownership of anything that can be recreated in viewDidLoad or on demand.
    // For example: self.myOutlet = nil;
}

- (void)dealloc
{
    [super dealloc];
}

@end

谢谢,你的回答非常好对我有用

Thanks, your answers are very useful for me

推荐答案

你应该调整你的数据源(你用plist构建的NSArray)来管理你拥有的不同部分。例如,而不是这样做:

You should tweak your data source (the NSArray you build from the plist) into managing the different sections you have. For example, instead of doing:

// On récupère l'objet Website qui correspon à la ligne que l'on souhaite afficher
CatsList *cl = [self.tabWebSites objectAtIndex:indexPath.row];

你能做到:

CatsList *cl = [self.tabWebSites objectAtIndex:[self linearIndexFromIndexPath:indexPath]];

其中 linearIndexFromIndexPath:将被定义,例如,像这样:

where linearIndexFromIndexPath: would be defined, e.g., like this:

- (NSUInteger)linearIndexFromIndexPath:(NSIndexPath*)indexPath {
    NSUInteger result = 0;
    for (int i = 0; i < indexPath.section ; i++) {
         result += [self numberOfSectionsInTableView:self.tableView];
    }
    return result + indexPath.row;
}

或类似的东西。请注意,在我的实现中,我决定不对每个部分中的行数进行硬编码,而是使用委托方法检索它们。这使代码更复杂,但对更改更具弹性。

or something similar. Notice that in my implementation, I decided not to hard code the number of rows in each section, but of retrieving them using the delegate method. This makes the code more complex, but more resilient to changes.

这篇关于在我的分段tableview中的哪一行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆