iPhone - webViewDidFinishLoad не вызывается
У меня есть простой вид в IB, который содержит только UIWebView и UIButton.
WebView сохранен, подключен, а не nil, свойство делегата также подключено, контроллер UIWebViewDelegate
соответствует и установлен в.h.
во ViewDidLoad я использую [self.webView loadHTMLString:htmlContent baseURL:nil]
;
Контент загружается, но webViewDidFinishLoad
никогда не срабатывает, ни didFailLoadWithError
ни webViewDidStartLoad
,
Как я могу узнать, когда мой контент закончил загрузку, поскольку это занимает короткое время, но все еще время для загрузки (и мне нужно сделать что-то в течение этого времени на дисплее, например, не показывая кнопку)?
@interface MyController : UIViewController <UIWebViewDelegate> {
UIWebView* webView;
}
@property (nonatomic, retain) IBOutlet UIWebView* webView;
@end
@implementation MyController
@synthesize webView;
- (void)viewDidLoad
{
[super viewDidLoad];
constructing the htmlString
id a = self.webView.delegate; // for debug
[self.webView loadHTMLString:htmlContent baseURL:nil];
}
@end
РЕДАКТИРОВАТЬ: я удалил весь XIB и построил его из Scrathc: больше никаких проблем. ИБ иногда сосет.
4 ответа
Я удалил весь XIB и построил его заново с нуля: больше никаких проблем. ИБ иногда сосет.
Вам необходимо реализовать UIWebViewDelegate
протокол в вашем классе и установить свойство делегата self.webView = self
, Вам нужно будет реализовать не опциональные методы делегата для класса, плюс webViewDidFinishLoad
, didFailLoadWithError
а также webViewDidStartLoad
методы.
Просто удар в темноте. Что касается приведенного выше кода, вы все еще не установили отвечающий объект делегату webView, вы установили указатель на объект делегата webView, но когда webView переходит к ответу делегату, он все равно будет равен нулю.
Вы, вероятно, должны иметь: self.webView.delegate = a; но даже тогда я не знаю, сработает ли это, потому что я не знаю, что это, - это объект, который будет отвечать на обратные вызовы делегата?
Вы должны реализовать UIWebViewDelegate
протокол в вашем классе и установить self.webView.delegate=self;