完成多个UIWebView请求后,如何在UITableViewCell中找到活动指示器?

时间:2018-11-12 22:55:49

标签: ios objective-c xcode uitableview uiwebview

我对Objective-C和iOS编程还很陌生。

我有一个SummaryUITableViewCell(继承自UITableViewCell的自定义类),其中包含一个活动指示器(loadingSpinner)和一个UIWebView(webView)。

我的应用获取要加载的URL列表,然后显示表格视图,每个URL包含一个单元格。

cellForRowAtIndexPath中,为加载微调器启动动画并调用cell.webView loadRequest:URL

一切正常,并且每个URL一次调用webViewDidFinishLoad(现在只有NSLog语句)。我不知道如何找到合适的loadingSpinner,以便停止动画并将其隐藏。

1 个答案:

答案 0 :(得分:1)

您希望每个SummaryUITableViewCell都实现UIWebViewDelegate并自己处理webViewDidFinishLoad调用。然后,您可以在每次加载UIWebView时轻松隐藏微调框。这是实现SummaryUITableViewCell的一种方法。

SummaryTableViewCell.h

#import <UIKit/UIKit.h>

@interface SummaryTableViewCell : UITableViewCell <UIWebViewDelegate>

@end

SummaryTableViewCell.m

#import "SummaryTableViewCell.h"

@interface SummaryTableViewCell ()

// Keep references to our spinner and webview here
@property (nonatomic, strong) UIActivityIndicatorView *spinner;
@property (nonatomic, strong) UIWebView *webView;

@end

@implementation SummaryTableViewCell

- (instancetype)initWithUrl:(NSString *)url {
    self = [super init];
    if (self) {
        [self setup:url];
    }
    return self;
}

- (void)setup:(NSString *)url {
    // Add Webview
    self.webView = [[UIWebView alloc] initWithFrame:[self frame]];
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
    [self.webView setAlpha:0];

    // Set the cell as the delegate of the webview
    [self.webView setDelegate:self];
    [self addSubview:self.webView];

    // Add Spinner
    self.spinner = [[UIActivityIndicatorView alloc] init];
    [self addSubview:self.spinner];
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    // The web view loaded the url so we can now hide the spinner and show the web view
    [self.spinner setAlpha:0];
    [self.webView setAlpha:1];
}

@end