Как правильно использовать делегат webkit для запуска и остановки счетчика, OS X, OBJ-C
-
12-12-2019 - |
Вопрос
Кажется, что это должно быть так просто, но я новичок в Objective-C.Я хочу просто запускать и останавливать счетчик, пока загружается мой WebView.Это приложение для OS X.Все, что я искал, — это Cocoa Touch, я использую только Cocoa.В моем AppDelegate.m у меня есть методы, которые запускают и останавливают счетчик (это работает, я это проверял).
-(IBAction)goSpin:(id)sender
{
[spinner startAnimation:self];
}
-(IBAction)stopSpin:(id)sender
{
[spinner stopAnimation:self];
}
У меня также есть два метода делегата для webView, которые я переопределил.
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
{
[self goSpin:self];
}
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
[self stopSpin:self];
}
По сути, я хотел бы знать, как мне заставить свой webView установить делегата.Обычно мне нужно что-то сделать в файле .h, но я не могу найти никаких ссылок, в которых перечислялось бы, какой делегат webKit подойдет для этого.Любая помощь будет оценена по достоинству.
Решение
А
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
и
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
методы являются частью Протокол WebFrameLoadDelegate.
Веб-представление имеет frameLoadDelegate
свойство.Установите его на свой WebView
экземпляр, позвонив [webView setFrameLoadDelegate:delegate]
, где delegate
— это NSObject, который реализует два метода (вам проще всего будет сделать self
FrameLoadDelegate здесь).Поскольку WebFrameLoadDelegate является неформальным протоколом, delegate
должен объявить два метода в своем файле .h, а не добавлять <WebFrameLoadDelegate>
к объявлению своего класса, как в формальном протоколе.
Другие советы
Вы можете переопределить эти методы делегирования WebView для запуска и остановки спина.
- (void)webViewDidStartLoad:(UIWebView *)webView{
// In this method you have to start a spinner.
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// In this method you have to stop the current spinner.
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
// In this method you have to stop the current spinner.
}
.