如何在iPhone中通过xmlparsing在tableview中显示图像

如何在iPhone中通过xmlparsing在tableview中显示图像,iphone,ios,uitableview,xml-parsing,uiimage,Iphone,Ios,Uitableview,Xml Parsing,Uiimage,我是iphone开发的新手,我正在使用NSXML解析并能够在tableview中显示数据,我还需要在tableview中显示图像和文本。在提交此问题之前,我在互联网上搜索过,但没有找到解决方案 下面是我用来在表视图上解析和显示数据的代码 NSMutableString *currentNodeContent; NSXMLParser *parser; ImageView *currentImage; bool isStatus; ViewController *xmlParser; -(NS

我是iphone开发的新手,我正在使用NSXML解析并能够在tableview中显示数据,我还需要在tableview中显示图像和文本。在提交此问题之前,我在互联网上搜索过,但没有找到解决方案

下面是我用来在表视图上解析和显示数据的代码

NSMutableString *currentNodeContent;
NSXMLParser *parser;
ImageView *currentImage;
bool isStatus;

ViewController *xmlParser;

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

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

-(UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    ImageView *currentImage = [[xmlParser templates]objectAtIndex:indexPath.row];

    UITableViewCell *cell = [UITableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

    CGRect nameLabelFrame = CGRectMake(55, 2, 250, 20);
    UILabel *namelabelF = [[UILabel alloc] initWithFrame:nameLabelFrame];
    namelabelF.tag = 0011;
    namelabelF.font = [UIFont boldSystemFontOfSize:12];
    namelabelF.text = @"Template Name :";
    namelabelF.textColor = [UIColor orangeColor];
    [cell.contentView addSubview:namelabelF];

    CGRect nameFrame = CGRectMake(165, 2, 250, 20);
    UILabel *nameLabel = [[UILabel alloc]initWithFrame:nameFrame];
    nameLabel.tag = 0012;
    nameLabel.font = [UIFont boldSystemFontOfSize:12];
    [cell.contentView addSubview:nameLabel];

    CGRect imageFrame = CGRectMake(105, 20, 250, 13);
    UILabel *imageLabel = [[UILabel alloc]initWithFrame:imageFrame];
    imageLabel.tag = 0014;
    imageLabel.font = [UIFont systemFontOfSize:12];
    [cell.contentView addSubview:imageLabel];

    CGRect categoryFrameCreated = CGRectMake(45, 35, 250, 10);
    UILabel *categoryFrameCreatedLabel = [[UILabel alloc] initWithFrame:categoryFrameCreated];
    categoryFrameCreatedLabel.tag = 0015;
    categoryFrameCreatedLabel.font = [UIFont boldSystemFontOfSize:10];
    categoryFrameCreatedLabel.text = @"Category ;";
    categoryFrameCreatedLabel.textColor = [UIColor grayColor];
    [cell.contentView addSubview:categoryFrameCreatedLabel];

    CGRect categoryFrame = CGRectMake(105, 35, 250, 10);
    UILabel *categoryLabel = [[UILabel alloc] initWithFrame:categoryFrame];
    categoryLabel.tag = 0016;
    categoryLabel.font = [UIFont systemFontOfSize:10];
    [cell.contentView addSubview:categoryLabel];

    }

    UILabel *templateLabel = (UILabel *)[cell.contentView viewWithTag:0012];
    templateLabel.text = [currentImage templateName];

    UILabel *imgLabel = (UILabel *)[cell.contentView viewWithTag:0014];
    imgLabel.text = [currentImage imgPath];


    UILabel *categoryLabel = (UILabel *)[cell.contentView viewWithTag:0016];
    categoryLabel.text = [currentImage category];

    return cell;

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return 55;
}


#pragma mark -
#pragma mark Table view delegate


-(id) loadXMLByURL:(NSString *)urlString
{
    templates       = [[NSMutableArray alloc] init];
    NSURL *url      = [NSURL URLWithString:urlString];
    NSData  *data   = [[NSData alloc] initWithContentsOfURL:url];
    parser          = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];

    return self;

}

- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    currentNodeContent = (NSMutableString *) [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}

- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    if ([elementname isEqualToString:@"template_maste"]) 
    {
        currentImage = [ImageView alloc];
        isStatus = YES;
    }

    if ([elementname isEqualToString:@"Template_name"]) 
    {
        currentImage = [ImageView alloc];
        isStatus = YES;
    }


}

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementname namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{

    if ([elementname isEqualToString:@"Template_name"]) 
    {
        currentImage.templateName = currentNodeContent;
    }  

    if ([elementname isEqualToString:@"img_path"]) 
    {
        currentImage.imgPath = currentNodeContent;
    }
    if ([elementname isEqualToString:@"Category"]) 
    {
        currentImage.category = currentNodeContent;
    }
    if ([elementname isEqualToString:@"template_maste"]) 
    {
        [self.templates addObject:currentImage];
        currentImage = nil;
        currentNodeContent = nil;
    }

}


- (void)viewDidLoad
{
    [super viewDidLoad];

    xmlParser = [[ViewController alloc] loadXMLByURL:@"http://www.okok.net/services/contacts.aspx?type=gettemplates1&category="];
}
*--xml文件--***

<template_maste>
<img_id>249</img_id>
<img_path>http://www.okok.net/Templatehtml/small/249.jpg</img_path>
<html_path>/templatehtml/249.html</html_path>
<Added_date>2011-12-28T00:00:00-08:00</Added_date>
<Template_name>Happy New year 4</Template_name>
<Category>Seasonal</Category>
<Template_Status>1</Template_Status>
</template_maste>

249
http://www.okok.net/Templatehtml/small/249.jpg
/templatehtml/249.html
2011-12-28:00:00-08:00
新年快乐4
季节性的
1.
我想在tableview中显示来自img_路径的图像


任何解决方案都将不胜感激。

我不确定您试图在表视图单元格中显示什么,但如果您希望显示图像,则需要使用
UIImageView
(现在您只需使用标签来显示图像URL)
顺便说一句,ImageView是您的模型,因此将其称为“视图”不是一个好主意。我会将其更改为imageData,并添加一个
UIImage
属性来保存实际图像。 因此,与向单元格添加标签的方式相同,添加图像视图:

UIImageView *imageView = nil;
if(cell == nil) {

       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];

       imageView = [[UIImageView alloc] initWithFrame:someFrame];
       imageView.tag = IMAGE_VIEW_TAG;
       [cell.contentView addSubview:imageView];  

       // ...
    }

    // now you need to configure this cell
    // first thing is to get the model for this cell
    ImageData *imageData = [[xmlParser templates]objectAtIndex:indexPath.row];  

    if (!imageData.image) {
       // we don't have the image yet in our model, so we need to fetch it from the
       // internet according to the image path. 
       // do it in a separate thread to not block the UI 
       dispatch_queue_t imgDownloaderQueue = dispatch_queue_create("imageDownloader", NULL);
       dispatch_async(imgDownloaderQueue, ^{
          NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imageData.imgPath]];
          UIImage *image = [UIImage imageWithData:imageData];
          [imageData release];
          dispatch_queue_t main_queue = dispatch_get_main_queue();
          dispatch_sync(main_queue, ^{
             imageData.image = image;

             // update UI 
             [self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                                          withRowAnimation:UITableViewRowAnimationNone];
          });
       });
       dispatch_release(imgDownloaderQueue);
    }
    else {
       // we already fetched the image, so we just update the image view

       imageView = (UIImageView *)[cell.contentView viewWithTag:IMAGE_VIEW_TAG];  
       imageView.image = imageData.image;
    }
}
我会用


使用此功能,您可以设置一个占位符图像以显示,直到图像被下载,并且一旦图像被下载,它将替换单元格的图像。

您是否在任何位置下载图像???@Eyal-不,我不在任何位置下载图像,我正试图将图像直接加载到tableview。类似问题