Получать уведомления о смене страницы в UIWebView

Мне любопытно, есть ли способ обнаружить изменение отображаемого веб-сайта внутри UIWebView. В приложении, над которым я работаю, мы используем UIWebView чтобы представить часть функциональности, за которой, в основном, следует выполнить несколько шагов, которым должен следовать пользователь. Тем не менее, в конце этих шагов будет определенная страница, которую мне нужно идентифицировать, после чего приложение должно будет отображать другое представление.

К сожалению, UIWebViewDelegate, похоже, не работает.

Ответ 1

Если шаги пользователя разделены на разных страницах, а UIWebView необходимо загрузить различные шаги, это действительно возможно с помощью методов делегата.

В этом примере мы говорим, что пользователь проходит три шага, названный step1.htm, step2.htm и, наконец, step3.htm. Этот код обнаружит, когда пользователь достигнет третьего и последнего шага.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    NSString *URLString = [[request URL] absoluteString];
    if ([URLString isEqualToString:@"http://www.example.com/step3.htm"]) {
        // The user reached step 3!
    }
    return YES;
}

Обратите внимание, что использование метода absoluteString может быть не лучшим способом узнать, где находится пользователь. Взгляните на query, path, parameterString и т.д.

Ответ 2

в Свифт 4

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    if request.url?.absoluteString == "http://www.example.com/step3.htm" {
        // The user reached step 3!
    }

    return true
}