#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;