部分中的行数

时间:2013-12-08 14:12:34

标签: ios uitableview plist

我有一个从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

但现在在这个方法中,我应该期望根据该部分返回行数,不知道如何做到这一点

3 个答案:

答案 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;
  }