【问题标题】:Display UIWebview HTML content in table row in iOS在 iOS 的表格行中显示 UIWebview HTML 内容
【发布时间】:2015-12-23 10:35:23
【问题描述】:

我对 iOS 很陌生。我正在创建一个基于table 的应用程序,我需要在我的UIWebView 中显示html 内容,它位于我的UITableViewCell 中。问题是当我滚动表格视图时,我的 webview html 内容被隐藏并显示为最后一个 tableCell 并且 CellForRowAtIndexPath 方法正在调用无限时间。

这是我的代码:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{

    aWebView.scrollView.scrollEnabled = NO;
    CGRect frame = aWebView.frame;
    frame.size.height = 1;
    aWebView.frame = frame;
    CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
    frame.size = fittingSize;
    aWebView.frame = frame;
    webViewHeight=fittingSize.height;

    [tblEventInfo reloadData];

}

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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    EventInfo *event = [[EventInfo alloc] init];
    event = [arrayEventInfo objectAtIndex:indexPath.section];

    NSLog(@"%@", event.event_title);

    if(!webViewHTML)
    {
        webViewHTML = [[UIWebView alloc]init];
        webViewHTML.delegate = self;
        webViewHTML.backgroundColor = [UIColor clearColor];
        webViewHTML.opaque = NO;
        webViewHTML.userInteractionEnabled = NO;

        [webViewHTML loadHTMLString:event.event_html baseURL: nil];
    }

    [webViewHTML loadHTMLString:event.event_html baseURL: nil];

    webViewHTML.frame = CGRectMake(0, 0, cell.frame.size.width, webViewHeight);

    [cell.contentView addSubview:webViewHTML];

    return cell;
}

请帮助我,我该如何解决这个问题?谢谢!

【问题讨论】:

    标签: ios objective-c uitableview uiwebview


    【解决方案1】:

    尝试添加

    [cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
    

    之前

    EventInfo *event = [[EventInfo alloc] init];
    

    我会建议一些更改

    EventInfo *event = [[EventInfo alloc] init];
    event = [arrayEventInfo objectAtIndex:indexPath.section];
    

    改成

    EventInfo *event = (EventInfo *)[arrayEventInfo objectAtIndex:indexPath.section];
    

    因为你已经在数组中有对象 我建议的另一件事是将webViewHTML 变量本地保存在 UITableViewCell 的cellForRowAtIndexPath 方法中

    【讨论】:

    • 我用你的代码试过了,但我的问题还是一样。
    【解决方案2】:

    您需要使用单独的 tableviewcell 标识符。 试试下面的代码

    NSString *CellIdentifier = [NSString stringWithFormat:@"CellRow%d%1d",indexPath.section,indexPath.row];
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
        EventInfo *event = [[EventInfo alloc] init];
        event = [arrayEventInfo objectAtIndex:indexPath.section];
    
        NSLog(@"%@", event.event_title);
    
        if(!webViewHTML)
        {
            webViewHTML = [[UIWebView alloc]init];
            webViewHTML.delegate = self;
            webViewHTML.backgroundColor = [UIColor clearColor];
            webViewHTML.opaque = NO;
            webViewHTML.userInteractionEnabled = NO;
    
            [webViewHTML loadHTMLString:event.event_html baseURL: nil];
        }
    
        [webViewHTML loadHTMLString:event.event_html baseURL: nil];
    
        webViewHTML.frame = CGRectMake(0, 0, cell.frame.size.width, webViewHeight);
    
        [cell.contentView addSubview:webViewHTML];
    }
        return cell;
    

    【讨论】:

    • 感谢您的宝贵时间,通过使用您的代码,现在无限循环问题得到了解决,但只为我的最后一个表格单元格获取了 HTML(网络视图)。休息是空白。
    • 你能上传一个示例应用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2017-06-24
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多