UITableView возвращает одинаковые элементы в каждом разделе

Я создал таблицу с разделами. У каждого раздела есть дата (2014-03-23) в качестве заголовка, и под каждой датой я хочу заполнить список игр, в которые нужно сыграть в тот день. Когда я запускаю приложение, таблица получает заголовок раздела (дата игры), но каждый раздел имеет одинаковый список совпадений. Я хочу, чтобы матчи проходили под датой раздела. Я знаю, что мне нужно включить indexPath.section в CellForRowsAtIndexPath, но мне трудно разобраться с этим.

Вот мой код:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
            {

                return gamesArray.count;
            }


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
        {

            uniqueArray = [[NSOrderedSet orderedSetWithArray:dateSection] array];
            return [uniqueArray count];



        }


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
        {
            return [self.dateSection objectAtIndex:section];
        }

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
         //NSString *CellIdentifier = [NSString stringWithFormat:@"games cell-%ld-%ld", (long)indexPath.section, (long)indexPath.row];
        static NSString *CellIdentifier = @"games cell";
        //NSString *CellIdentifier = [NSString stringWithFormat:@"cell-%d-%d", indexPath.section, indexPath.row];


        CustomInboxCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = (CustomInboxCell *)[[CustomInboxCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
        }

        PFObject *post = [gamesArray objectAtIndex:indexPath.row]; 
        [cell.teamsLabel setText:[post  objectForKey:@"teams"]];
        [cell.liveRepeatLabel setText:[post objectForKey:@"liveRepeat"]];
        [cell.gameTimeLabel setText:[post objectForKey:@"gameTime"]];

        return cell;
    }

Любая помощь будет принята с благодарностью.

//======================================================
//I decided to use a predicate to filter and get the number of items per date(Number of games per date)

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

    NSString *sectionTitle = [uniqueArray objectAtIndex:section];

    if (section >=0) {

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"gameDate == %@",sectionTitle];
        NSLog(@"section name = %@", sectionTitle);
        NSArray *filtered = [gamesArray filteredArrayUsingPredicate:predicate];
        NSLog(@"filtered = %@",filtered);
        return filtered.count;
    }

    return 0;
}

// Мне просто нужно перебирать каждую дату и возвращать количество игр за дату. Какие-либо предложения?

2 ответа

Вам нужен отдельный массив для каждого раздела таблицы. В numberOfRowsForSectionнужно вернуть count для массива, который соответствует заданному section,


Вот пример. Данные для таблицы хранятся в NSArray с именем tableData, Массив имеет одну запись для каждого раздела таблицы. Каждая запись в tableData является NSDictionary. NSDictionary имеет два ключа, title а также items, title ключ соответствует NSString, который служит заголовком для раздела таблицы. items ключ соответствует NSArray, который имеет информацию о строке для раздела таблицы.

Таблица состоит из двух разделов, как это

Fruits
    Apples
    Oranges
Animals
    Dog
    Cat
    Horse
    Cow

Вот код

#import "MainViewController.h"

@interface MainViewController () <UITableViewDataSource, UITableViewDelegate>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) NSArray *tableData;
@end

@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;

    NSDictionary *fruits, *animals;

    fruits  = @{ @"title" : @"Fruits" , @"items" : @[@"Apples", @"Oranges"]            };
    animals = @{ @"title" : @"Animals", @"items" : @[@"Dog", @"Cat", @"Horse", @"Cow"] };

    self.tableData = @[fruits, animals];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return( self.tableData.count );
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSDictionary *sectionData = self.tableData[section];
    NSArray *items = sectionData[@"items"];
    return( items.count );
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    NSDictionary *sectionData = self.tableData[section];
    NSString *title = sectionData[@"title"];
    return( title );
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"SomeCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSDictionary *sectionData = self.tableData[indexPath.section];
    NSArray *items = sectionData[@"items"];
    NSString *name = items[indexPath.row];

    cell.textLabel.text = name;

    return cell;
}

@end

Это проблема с набором данных, вам нужно подготовить отдельный набор данных для каждого раздела вашего табличного представления и итерировать их, используя свойства индекса пути (строки, раздела) в вашем методе cellForRowAtIndexPath. Если вы можете сделать NSLog и поделиться своим набором данных, было бы более полезно ответить точно. Надеюсь это поможет.

Другие вопросы по тегам