如何根据部分在每一行中显示不同的图像?

时间:2011-12-05 11:37:22

标签: iphone objective-c uitableview

我有一个UITableview,在该表中有很多部分。现在我必须为不同部分的行设置不同的图像。我知道如何为一个部分中的不同行设置不同的图像,但在这里我必须在不同部分的行上设置不同的图像?

3 个答案:

答案 0 :(得分:2)

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.section == yourSection) {
     if(indexPath.row == yourRow) {
     // Do something
    }
  }
}

使用此基本逻辑可根据您的需要进行自定义。如果数字较大,最好使用switch case而不是if-else

答案 1 :(得分:1)

- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
    NSArray *listData =[self.tableContents objectForKey:[self.sotreKeys objectAtIndex:[indexPath section]]];


    UITableViewCell * cell = [tableView 
                              dequeueReusableCellWithIdentifier:SimpleTableIdentifier];

    if(cell == nil) {

        cell = [[[UITableViewCell alloc] 
                 initWithStyle:UITableViewCellStyleValue1 
                 reuseIdentifier:SimpleTableIdentifier] autorelease];


    }
    if(indexPath.section == 0 && indexPath.row ==0)
    {
        /*Add image on section of cell*/
cell.imageView.image = [UIImage imageNamed:@"image.png"];
    }
if(indexPath.section == 0 && indexPath.row ==1)
    {
        /*Add image on section of cell*/
cell.imageView.image = [UIImage imageNamed:@"image.png"];
    }
if(indexPath.section == 1 && indexPath.row ==1)
    {
        /*Add image on section of cell*/
cell.imageView.image = [UIImage imageNamed:@"image.png"];
    }
}

使用这个我认为它会帮助你

答案 2 :(得分:0)

有很多方法可以解决这个问题。如果您要将图像存储在数组中,我发现这是最好的方法。

将图像存储在一个数组数组中,以便您可以使用section和row对其进行索引,并以类似的方式访问它。数组的数量应该是节的数量。如果要动态更改节和/或行的数量,我建议您使用NSMutableArray。如果没有,NSArray将正常工作。

您现在可以从像cellForRowAtIndexPath:这样的方法设置这些图像,或者您知道要加载的单元格的indexPath的任何方法,如

[[imagesSource objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

而不是不必要的switch / if语句。我可能还会添加switch /如果在加载tableviews的单元格时效果不佳,但在tablview上使用时非常方便,以确定哪个tableview需要一个单元格。

如果您需要以不同的方式存储图像,请指定以便我可以尝试找出更好的解决方案。