iPhone — webViewDidFinishLoad не вызывается

#iphone #cocoa-touch #uiwebview #properties #interface-builder

#iPhone #cocoa-touch #uiwebview #свойства #конструктор интерфейса

Вопрос:

У меня есть простое представление в IB, которое содержит только UIWebView и UIButton.
WebView сохраняется, подключен, не равен нулю, свойство делегата os также подключено, контроллер 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: больше никаких проблем. IB иногда отстой.

Комментарии:

1. htmlcontent не равен нулю? Покажите код для того, как это загружается.

2. Вызывается ли shouldStartLoadWithRequest ?

3. @logancautrell: shouldStartLoadWithRequest не вызывается

4. Попробуйте удалить uiwebview в nib и сбросить делегат и выходы для него.

5. Я вижу, что удаление равно нулю (в viewDidLoad), но оно подключено к IB. Я пытался подключить его снова и снова, но это ничего не меняет.

Ответ №1:

Вам необходимо реализовать UIWebViewDelegate протокол в вашем классе и установить свойство делегата self.webView = self . Вам нужно будет реализовать необязательные методы делегирования для класса webViewDidFinishLoad , didFailLoadWithError а webViewDidStartLoad также методы и .

Комментарии:

1. Пожалуйста, посмотрите мое редактирование, хотя я был ясен, но я не был: делегат подключен.

Ответ №2:

Я удалил весь XIB и построил его заново с нуля: больше никаких проблем. IB иногда отстой.

Ответ №3:

Просто своего рода удар в темноте. Что касается вашего приведенного выше кода, вы все еще не установили объект-ответчик для делегата WebView, вы установили указатель на объект делегата WebView, но когда WebView переходит к ответу делегату, он все равно будет равен нулю.

Вероятно, у вас должно быть: self.WebView.delegate = a; но даже тогда я не знаю, сработает ли это, потому что я не знаю, что такое a, это объект, который будет отвечать на обратные вызовы делегата?

Комментарии:

1. как сказано в вопросе, делегат подключен (т.Е. В IB). идентификатор a здесь только для целей тестирования (т. Е. Для отладки).

Ответ №4:

Вы должны реализовать UIWebViewDelegate протокол в своем классе и установить self.webView.delegate=self;