如何使用单个数组在UITableView节表中获取显示数据

时间:2013-03-26 05:59:59

标签: iphone ipad nsarray uitableview

我在服务器上有数据,我想在tableView中显示。

问题在于我想基于类别显示数据,所以我有数组类别,其中的类别将是节标题,其中有数据,所以要显示我必须声明数组的数据。

例如如果有三个类别,那么我们必须制作三个数组来填充数据,但是如果有更多类别,则类别是动态的并来自服务器。

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [categoryArray count] ;
    }

如何设置节标题的标题,因为它在类别数组中,所以如果它是数组中的逐个节。

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
  {


    NSLog(@"Number of Sections");
    if(section == 0)
     return @"Sales";
    if(section == 1)
    return @"Soft Skills";
}

如何在tableView单元格中显示数据我可以为所有类别创建数组吗?

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


if (section==0)
{

    appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];

    int count=[resultArray count];

    NSLog(@"resultArry Row Counts is %d",count);

    return [resultArray count];

}
else{
    appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];

    int count=[resultArrayOne count];

    NSLog(@"resultArry Row Counts is %d",count);

    return [resultArrayOne count];
}
     }




       - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath     
    {

NSLog(@"Table Cell Data");


     static NSString *CellIdentifier = @"Cell";

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

cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;


if (indexPath.section==0) {



    appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];


    ObjectData *theCellData = [resultArray objectAtIndex:indexPath.row];
    NSString *cellValue =theCellData.sub_Category;
    cell.font=[UIFont fontWithName:@"Helvetical Bold" size:14];
    NSLog(@"Cell Values %@",cellValue);
    cell.textLabel.text = cellValue;

    return cell;
}

else {



    appDelegate = (MultipleDetailViewsWithNavigatorAppDelegate *)[[UIApplication sharedApplication] delegate];
    ObjectData *theCellData = [resultArrayOne objectAtIndex:indexPath.row];
    NSString *cellValue =theCellData.sub_Category;
    cell.font=[UIFont fontWithName:@"Helvetical Bold" size:14];

    NSLog(@"Cell Values %@",cellValue);
    cell.textLabel.text = cellValue;
    return cell;



   }
      }

3 个答案:

答案 0 :(得分:1)

由于从服务器获取类别似乎不是您的问题,因此我的答案基于预填充数组,以便更好地进行可视化。

NSMutableArray *categories = @[@"Cat1", @"Cat2"];

// creata a dictionary with all the array for the categorie rows
NSMutableDictionary *rowDict = @{@"Cat1":@[@"Cat1Row1",@"Cat1Row2",@"..."],
                     @"Cat2":@[@"Cat2Row1", @"Cat2Row2",@"..."]

此解决方案的关键是您使用类别字符串作为字典的键。

您现在可以像这样访问标题

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
  return categories[section];
}

并像这样访问你的行

- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  // ...
  // create or deque a cell like you normally would do

  // now configure the cell
  cell.textLable.text = [rowDict[categories[indexPath.section]] objectAtIndex:indexPath.row] 
}

答案 1 :(得分:0)

尝试以下代码。它会解决你的问题:

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

编辑:

  1. 首先创建一个模型数据类来存储类别的数据。
  2. 使用此模型类感受numberOfRowsInSectioncellForRowAtIndexPath委托功能。
  3. 而不是为每个类别创建不同的不同数组。将此数组存储在一个模型类中。这很容易处理。

答案 2 :(得分:0)

使用

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
  return [categoryArray objectAtindex:section];
}

用于章节标题。

同样,将每个类别的值存储在一个nsmutable数组NSDictionary中,并在uitableviewcell中显示每个类别的数据。