Я использую UIWebView
и не хочу, чтобы панель навигации отображалась, если пользователь не нажимает нигде на экране, который не является ссылкой.
Поэтому у меня есть этот код для отображения панели навигации после задержки:
- (void)handleTapGesture:(UITapGestureRecognizer *)sender
{
....
[self performSelector:@selector(showNavigationBar) withObject:self afterDelay:0.2];
}
Я не звоню showNavigationBar
сразу же, когда вызывается обработчик крана, потому что пользователь может использовать ссылку, в этом случае вызывающий дескриптор вызывается до UIWebView
shouldStartLoadWithRequest
, поэтому, если я спрятал навигационную панель в shouldStartLoadWithRequest
он мгновенно мигнет на экран.
Поэтому вместо этого я устанавливаю его для отображения после задержки, которая дает время для выполнения следующего кода в shouldStartLoadWithRequest
(и если пользователь не нажал на ссылку shouldStartLoadWithRequest
, не вызывается и отображается панель навигации, так как это должно быть в этом случае).
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(showNavigationBar) object:nil];
...
Однако это не работает, я увеличил время задержки до нескольких секунд и могу подтвердить, что cancelPreviousPerformRequestWithTarget
получает вызов до отображения панели навигации, но когда указанное время истекает, отображается панель. cancelPreviousPerformRequestWithTarget
не имеет эффекта.
Кто-нибудь знает, почему он не работает?