简体   繁体   中英

How to populate multiple table view sections from the same .plist

Sorry if this has been discussed already, I couldn't find what I was after..

I have a .plist file which has 2 arrays in it, which are split exactly how I would like my sections split in my table view.

I have no problem getting an array into a table view, but I cant get my head around how to tell the app that I want one array in the first section and the second array in the second section.

My code at the moment to get an array into a table is this (and it works fine):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    //Create string with reference to the prototype cell created in storyboard
    static NSString *CellIdentifier = @"PlayerNameCell";

    //Create table view cell using the correct cell type
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier      forIndexPath:indexPath];

    //Create a dictionary containing the player names
    NSDictionary *players = (NSDictionary*) [[self Squad] objectAtIndex:[indexPath row]];

    //Set the cell text to the player name
    [[cell textLabel] setText:(NSString*)[players valueForKey:@"PlayerFullName"]];

    //Set the cell detail text to the squad number
    [[cell detailTextLabel] setText:(NSString*)[players valueForKey:@"PlayerSquadNumber"]];

    return cell;
}

But now I have another table view where I'll need 2 sections, each reading from different arrays.

Any help would be greatly appreciated.

Many thanks

Okay, so you have 2 arrays at the top level, and each of those arrays contains arrays, right?

You've got a couple methods you need to adjust. Return the number of top level arrays for the number of sections in the table view. In cellForRowAtIndexPath:, return the correct object for the correct section/row. Something like

[[sectionsArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]

Just do the following:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)aTableView
{
    return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifier = @"PlayerNameCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if( cell == nil ){
        UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }

    if( indexPath.section == 0 ){
        NSDictionary *players = (NSDictionary*) [self.array1 objectAtIndex:indexPath.row];
        cell.textLabel.text = (NSString*)[players valueForKey:@"PlayerFullName"];
        cell.detailTextLabel.text = (NSString*)[players valueForKey:@"PlayerSquadNumber"];
    } else {
        NSDictionary *players = (NSDictionary*) [self.array2 objectAtIndex:indexPath.row];
        cell.textLabel.text = (NSString*)[players valueForKey:@"PlayerFullName"];
        cell.detailTextLabel.text = (NSString*)[players valueForKey:@"PlayerSquadNumber"];
    }

    return cell;
}

Set the number of sections to 2. For each section get the different values with [self.array2 objectAtIndex:indexPath.row].

I don't know how you are saving the plist into 2 arrays, but if you need help with that let me know.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM