动态加载Grouped tableView

时间:2013-04-24 03:55:21

标签: iphone ios objective-c uitableview grouped-table

我正在尝试将信息显示到带有2个动态单元格的分组UITableView中。每个分组的UITableView需要在单个视图中调用10次;每个分组UITableView在其2个单元格中显示不同的信息。

现在我正在尝试显示存储在posts中的数据库中的所有数据。但是,当我运行此版本时,应用程序崩溃。如果我将[self.posts count]中的返回numberOfSectionsInTableView:更改为返回1,则我只能按预期加载一个部分。

我的问题是如何显示10个分组的表格部分,每个部分都有不同的信息?

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
//#warning Potentially incomplete method implementation.
// Return the number of sections.
return [self.posts count];
}

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


NSInteger returnValue = 2;
switch (section) {
    case 0:
    {
        returnValue = 2;
        break;
    }
    default:
        break;
}

return returnValue;

}


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

NSString *CellIdentifier1 = @"Cell";


UITableViewCell *cell;
if (indexPath.section==0)
{
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
    if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.row==0)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"name"];
            }
    if (indexPath.row==1)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"message"];
            }
}

return cell;

}

2 个答案:

答案 0 :(得分:1)

当section = 0时,您正在创建单元格。您应该每次都创建单元格。您无法从cellForRowAtIndexPath方法返回nil。

以下面的方式修改您的实施:

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

    NSString *CellIdentifier1 = @"Cell";        
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

    if (cell == nil)
    {
         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.section==0)
    {
        if (indexPath.row==0)
        {
            cell.textLabel.text = [[self.posts objectAtIndex:indexPath.row] objectForKey:@"name"];
        }
        //Rest of the code..
    }
    else if(indexPath.section ==1)
    {
        //Do the work with section 1.
    }
    //do the work for other sections...

    return cell;
}

答案 1 :(得分:0)

编写的代码足以满足您的需求。只需删除if (indexPath.section==0){中的这一行cellForRowAtIndexPath即可。

更新:根据您的观点,以下代码就足够了。如果您正确存储到posts

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

NSString *CellIdentifier1 = @"Cell";


UITableViewCell *cell = nil;

    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier1];
    if (cell == nil) {
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier1];
    }

    if (indexPath.row==0)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.section] objectForKey:@"name"];//Here modified `section` instead of `row`
            }
    else if (indexPath.row==1)
            {
                cell.textLabel.text = [[self.posts objectAtIndex:indexPath.section] objectForKey:@"message"];
            }


return cell;

}