Поскольку webviewdidfinishload
устарело, а делегаты webKit
, похоже, не срабатывают при переходе к другому url
(из того, что я вижу), я изучил использование наблюдателя forKeyPath
, как здесь:
Как я могу определить, когда URL-адрес страницы усилителя изменился с помощью WKWebview
И хотя это кажется правильным, я не могу заставить observeValue
срабатывать. Иногда это работает, но чаще всего это не так, и, похоже, нет никакой последовательности.
- (void)setUpWebView {
NSString * urlString = [NSString stringWithFormat:@"www.thisisnottherealurl.com"];
NSURL *url = [NSURL URLWithString: urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
WKWebViewConfiguration *webViewConfig = [WKWebViewConfiguration new];
_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webViewConfig];
_webView.navigationDelegate = self;
_webView.translatesAutoresizingMaskIntoConstraints = NO;
_webView.alpha = 0.0f;
// _webView.alpha = 1;
[_webViewContainer addSubview:_webView];
[self startLoadingAnimation];
[_webView.topAnchor constraintEqualToAnchor:_webViewContainer.topAnchor].active = YES;
[_webView.bottomAnchor constraintEqualToAnchor:_webViewContainer.bottomAnchor].active = YES;
[_webView.rightAnchor constraintEqualToAnchor:_webViewContainer.rightAnchor].active = YES;
[_webView.leftAnchor constraintEqualToAnchor:_webViewContainer.leftAnchor].active = YES;
[_webView.heightAnchor constraintEqualToAnchor:_webViewContainer.heightAnchor].active = YES;
[_webView loadRequest:request];
//IMPORTANT PART
[_webView addObserver:self forKeyPath:@"url" options: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior context:nil];
}
А затем часть observeValue
:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
NSLog(@"?OBSERVED");
}
Теперь это не сработает. Вместо наблюдения _webView
я также попытался _webView.URL.absoluteString
. Но, тем не менее, это не сработает. Я добавил альтернативные варианты, такие как: NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld | NSKeyValueObservingOptionPrior
, но все еще ничего.
Что я делаю не так?
Есть ли лучший подход к этому? Есть ли delegate
, который фактически срабатывает при переходе по другой ссылке?