填充分段的UITableView

时间:2013-12-13 08:20:08

标签: ios objective-c cocoa-touch uitableview

好的,这个问题可能已被问过几次,但我找不到一个可以帮助我挺身而出的例子。

我正在尝试创建一个作为某种历史记录的分段UITableView:它应该由一个由HistoryBatchVO对象组成的NSMutableArray填充。那些HistoryBatchVO对象包含一个时间戳(NSDate)和一个名称数组(NSMutableArray),后者又包含NameVO类型的对象,其中包含(以及其他)NSString。

我想使用时间戳作为section标题,并将NameVOs中的字符串相应地填入表中的部分。

在我的桌面控制器中,我有:

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 1;
}

(注意:_dataModel.history是我的HistoryBatchVOs的NSMutableArray)。 ...但我想 numberOfRowsInSection 需要返回HistoryBatchVO.names数组中的对象数。问题是我该怎么做?

另外,如何更改 cellForRowAtIndexPath 的实现以使其正常工作?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
    HistoryBatchVO *batchVO = [_dataModel.history objectAtIndex:indexPath.row];

    return cell;
}

更新:解决问题后,这是工作代码:

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


-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    HistoryBatchVO *h = [_dataModel.history objectAtIndex:section];
    return [h.names count];
}


-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    HistoryBatchVO *h = [_dataModel.history objectAtIndex:section];
    return [NSString stringWithFormat:@"%@", h.timestamp];
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Cell";
    UITableViewCell *cell = nil;
    cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];

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

    HistoryBatchVO *batchVO = [_dataModel.history objectAtIndex:indexPath.section];
    NameVO *nameVO = [batchVO.names objectAtIndex:indexPath.row];
    cell.textLabel.text = nameVO.string;

    return cell;
}

1 个答案:

答案 0 :(得分:1)

假设names是一个数组并且有更多数据类型的假设,程序框架将是这样的,但您必须满足您的需求。

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

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    HistoryBatchVO * h = [_dataModel.history objectAtIndex:section];
    return [h.names count];
}

您还需要实现节标题,但我想您希望使用NSDateFormatter格式化日期。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
     HistoryBatchVO * h = [_dataModel.history objectAtIndex:section];
     return h.date;
}

单元格元素将是这样的,

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellID = @"Cell";
    UITableViewCell *cell = nil;       
    cell = [tableView dequeueReusableCellWithIdentifier:cellID forIndexPath:indexPath];
    if ( cell == nil)
       cell = [[UITableViewCell alloc] UITableViewCellStyle:UITableViewCellStylePlain reuseIdentifier:cellID];

    HistoryBatchVO *batchVO = [_dataModel.history objectAtIndex:indexPath.section];
    NameVO * nm = [batchVO.names objectAtIndex:indexPath.row];
    cell.textLabel.text = nm.name

    return cell;
}