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 и поделиться своим набором данных, было бы более полезно ответить точно. Надеюсь это поможет.