我有一个从plist填充的表视图。在plist我有一个Categories数组:
Catgeories - Array
item 0 - Maths
item 1 - English
....
在同一个plist中我有一个Notes数组
Notes - Array
item 0 - Dictionary
Title - My maths note 1
Text - This is algebra
Category - Maths
item 1 - Dictionary
Title - My English
Text - This is algebra
Category - English
我有多少部分......
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [self.categories count];
}
在我将categories数组添加到plist之前的numberOfRowsInSection中我可以简单地使用
return self.notes.count;
在每个类别中都会产生重复:http://i.stack.imgur.com/9xScH.png
但现在在这个方法中,我应该期望根据该部分返回行数,不知道如何做到这一点
答案 0 :(得分:2)
您需要做类似的事情:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
{
return self.notes.count;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.notes[section].count;
}
根据部分和数组的返回计数得到你的数组。
// EXTENDED 如果您希望在类别数组中使用与数据一样多的部分:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
{
return self.catgeories.count;
}
self.note数组包含带有Category键的字典对象,我相信你想显示类别等于section类别的部分的所有数据。要做到这一点,你必须过滤你的笔记数组,试试这个(我假设你在Caregory plist中有不同的对象):
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Get category
NSString *cat = self.catgeories[section];
//Filter notes array
NSPredicate *pred = [NSPredicate predicateWithFormat:@"Category =[cd] %@", cat];
NSArray * catArray = [self.notes filteredArrayUsingPredicate:pred];
return catArray.count;
}
答案 1 :(得分:2)
我编辑了答案。 如果您想访问大量数据,我建议您将数据存储在核心数据而不是plist中, 要获取每个部分的行数,您可以使用此
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// check if the count of the array is greater than number of sections
if (self.notes.count > section)
return [[[self.notes objectAtIndex:section]allObjects]count];
}
希望有所帮助:)
答案 2 :(得分:0)
如果要在每个部分中返回不同数量的行,可以尝试这样做: -
- (NSInteger)tableView:(UITableView
*)tableView numberOfRowsInSection:
(NSInteger)section
{
int rows=0;
if(section==0)
{
rows=1;
}
if(section==1)
{
rows=2;
}
rerurn rows;
}