我目前正在构建一个iPhone应用程序,它将显示来自名为“stories”的NSMutableArray的数据。数组结构如此(通过NSLog):
2009-07-20 12:38:30.541 testapp[4797:20b] (
{
link = "http://www.testing.com";
message = "testing";
username = "test";
},
{
link = "http://www.testing2.com";
message = "testing2";
username = "test2";
} )
我的cellForRowAtIndexPath目前看起来像这样:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
}
for (NSDictionary *story in stories) {
[cell setTextColor:[UIColor whiteColor]];
[cell setFont: [UIFont systemFontOfSize:11]];
cell.text = [NSString stringWithFormat:[story objectForKey:@"message"]];
}
return cell;
}
目前我的UITableView显示了SAME项的多个条目(恰好是数组中的最终集)。如何让它成功遍历数组并逐个显示单元格中的下一项消息。
提前致谢:)
畚箕
答案 0 :(得分:5)
你误解了cellForRowAtIndexPath:方法是如何工作的。
你拥有它的方式,你创建一个单元格,然后重复重置其text,textColor和字体属性,然后返回一个单元格。
理解您的问题的关键是理解cellForRowAtIndexPath:被多次调用 ,对于将在屏幕上显示的每个单元格一次。所以不要使用for()循环,而是执行此操作:
NSDictionary * story = [stories objectAtIndex:[indexPath row]];
[cell setTextColor:[UIColor whiteColor]];
[cell setFont: [UIFont systemFontOfSize:11]];
cell.text = [NSString stringWithFormat:[story objectForKey:@"message"]];
传入的indexPath参数是tableView如何指示它要求您的单元格。我们用它从你的数组中获取相应的故事字典。
编辑:
我还想指出这段代码不兼容iPhone OS 3.0。 3.0 SDK引入了UITableViewCell工作方式的变化,包括其视图层次结构。您可能希望访问单元格的textLabel,然后设置 的属性,如下所示:
NSDictionary * story = [stories objectAtIndex:[indexPath row]];
[[cell textLabel] setTextColor:[UIColor whiteColor]];
[[cell textLabel] setFont: [UIFont systemFontOfSize:11]];
[[cell textLabel] setText:[NSString stringWithFormat:[story objectForKey:@"message"]]];
答案 1 :(得分:0)
这里不需要循环 - 你想要做的是使用表格单元格的索引并获取数组的相应元素(目前还不清楚,你使用的是数组还是字典?) 。因此,例如,数组的第四个元素将放在第四个表格单元格中。
以下是修复:
NSDictionary *story = [stories objectAtIndex: indexPath.row];
cell.text=[NSString stringwithFormat:[story objectForKey@"message];
答案 2 :(得分:0)
你的问题是这个
for (NSDictionary *story in stories) {
[cell setTextColor:[UIColor whiteColor]];
[cell setFont:[UIFont systemFontOfSize:11]];
cell.text = [NSString stringWithFormat:[story objectForKey:@“message”]];
}
您正在设置单元格以始终显示最后一个故事,您想要执行的操作
NSDictionary *story = [stories objectAtIndex: indexPath.row];
cell.text=[NSString stringwithFormat:[story objectForKey@"message];
答案 3 :(得分:0)
而不是
for (NSDictionary *story in stories) {
cell.text = [NSString stringWithFormat:[story objectForKey:@"message"]];
}
你想要
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
cell.text = [NSString stringWithFormat:[[stories objectAtIndex: storyIndex] objectForKey:@"message"]];
每个单元格都会调用一次cellForRowAtIndexPath
方法,因此您只想为该特定单元格设置文本。
请注意,对于没有节的简单表,“索引路径”最终只是一个包含一个整数的数组。