好的,可能已经问过几次这个问题,但是我找不到一个可以帮助我前进的例子。
我正在尝试创建一个分段的UITableView,它充当某种历史记录:它应该由包含HistoryBatchVO对象的NSMutableArray填充。这些HistoryBatchVO对象包含一个时间戳(NSDate)和一个名称数组(NSMutableArray),后者又包含NameVO类型的对象,该对象包含(其中包括)一个NSString。
我想使用时间戳作为节头,并将NameVO的字符串相应地填充到表的节中。
在我的表控制器中,我有:
-(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;
}
最佳答案
假设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;
}
关于ios - 填充分段的UITableView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20561982/