我对Objective-C和iOS编程还很陌生。
我有一个SummaryUITableViewCell
(继承自UITableViewCell
的自定义类),其中包含一个活动指示器(loadingSpinner
)和一个UIWebView(webView
)。
我的应用获取要加载的URL列表,然后显示表格视图,每个URL包含一个单元格。
在cellForRowAtIndexPath
中,为加载微调器启动动画并调用cell.webView loadRequest:URL
。
一切正常,并且每个URL一次调用webViewDidFinishLoad
(现在只有NSLog
语句)。我不知道如何找到合适的loadingSpinner
,以便停止动画并将其隐藏。
答案 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