4

我已经使用 JSON/PHP/MYSQL 在表格视图中成功解析文本和图像。我只是将图像的位置存储在数据库中,而实际图像存储在我服务器上的目录中。与数据库中的图像相关的唯一存储是名称。示例汽车.jpg。我想要做的是在我的服务器上添加图像位置的 URL 前缀,这样就可以解析它们,而无需我进入数据库并手动输入 URL。这是我的一些代码...

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

    static NSString *identifier = @"studentsCell";

    StudentsCell *cell = (StudentsCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StudentsCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }
    NSDictionary *studentsDict = [students objectAtIndex:indexPath.row];
    //I want to prefix the URL for the key imagepath but i dont know where and how to do it.
    NSURL *imageURL = [NSURL URLWithString:[studentsDict objectForKey:@"imagepath"]];
    NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
    UIImage *imageLoad = [[UIImage alloc] initWithData:imageData];

    cell.imageView.image = imageLoad;

    NSString *name = [NSString stringWithFormat:@"%@ %@", [studentsDict valueForKey:@"first"], [studentsDict valueForKey:@"last"]];

    cell.title.text = name;

    NSString *subtitle = [NSString stringWithFormat:@"%@", [studentsDict objectForKey:@"email"]];

    cell.subtitle.text = subtitle;

    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.frame = CGRectMake(265, 6, 44, 44);
    [button setImage:[UIImage imageNamed:@"email.png"] forState:UIControlStateNormal];
    [button addTarget:self action:@selector(email:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:button];

   // cell.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellbackground.png"]];

    return cell;
}
4

1 回答 1

2

假设你有类似的东西:

NSURL *baseURL = [NSURL URLWithString:@"http://www.your.site.here/images"]; // whatever the folder with the images is

然后你可以这样做:

NSURL *imageURL = [baseURL URLByAppendingPathComponent:[studentsDict objectForKey:@"imagepath"]];

顺便说一句,您应该考虑使用一个UIImageView类别,例如SDWebImage。然后,NSData您可以执行异步图像加载,而不是同步加载图像数据:

[cell.imageView setImageWithURL:imageURL
               placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

占位符是在加载图像时应该显示的内容(可能只是一个空白图像),然后SDWebImage将异步检索图像并在检索时更新单元格。这将产生一个响应速度更快的用户界面。它还将利用图像缓存(因此,如果您向下滚动然后再向上滚动,则不会再次检索图像)。

AFNetworking有类似的UIImageView类别,但没有那么健壮的实现。但如果您已经在使用 AFNetworking,这是一个选择。

于 2013-08-12T22:28:55.153 回答