Удаление WKWebView, оставляя клавиатуру открытойIOS

Программируем под IOS
Ответить
Anonymous
 Удаление WKWebView, оставляя клавиатуру открытой

Сообщение Anonymous »

Обновлено приложение, которое использовало UIWebView, чтобы вместо него использовать WKWebView. Однако клавиатуру можно заставить оставаться включенной и не отвечать на запросы, выполнив следующие действия:

[*]WKWebView открывается по URL-адресу, имеющему поле ввода. (s) и прикреплен к суперпредставлению.
[*]Поле ввода активировано и отображается клавиатура.
[*]Текст можно вводить с клавиатуры, как и ожидалось. .
[*]Выполняется действие, которое удаляет WKWebView из суперпредставления, пока отображается клавиатура. Клавиатура удаляется, как и ожидалось, вместе с WKWebView.
[*]Откройте новый WKWebView по URL-адресу, который имеет поля ввода и прикреплен к суперпредставлению.
[*]Активируйте поле ввода, и отобразится клавиатура.
[*]Выполняется действие, которое удаляет WKWebView из суперпредставления, пока отображается клавиатура.
< /ul>
На этом этапе клавиатура не исчезнет, ​​и ее нельзя заставить исчезнуть.
Очевидно, что желаемое поведение заключается в том, чтобы клавиатура исчезать каждый раз, когда веб-просмотр закрывается.
Я написал простое небольшое тестовое приложение и могу воспроизвести проблему за пределами сложности приложения.
Каков же приемлемый способ избавиться от WKWebView? Это фрагмент кода того, что у меня не работает, оставляя клавиатуру безжизненной при втором вызове, как будто ее отсоединили и забыли.
[webView stopLoading];
webView.navigationDelegate = nil;
webView.scrollView.delegate = nil;
[webView removeFromSuperview];
webView = nil;

Вот еще один рабочий пример. Я старался сделать это проще и использовал двойное нажатие для добавления/удаления, но кнопка или таймер также работают, чтобы вызвать добавление/удаление веб-просмотра. Я не думаю, что это имеет какое-то значение. Похоже, проблема заключается в удалении WKWebView, когда клавиатура открыта и активна.
- (void)viewDidLoad {
[super viewDidLoad];

webView = nil;
webViewIsActive = FALSE;

tap2Recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleTap:)];
tap2Recognizer.numberOfTouchesRequired = 1;
tap2Recognizer.numberOfTapsRequired = 2;
tap2Recognizer.delegate = self;
[self.view addGestureRecognizer:tap2Recognizer];
}

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return YES;
}

- (void)handleDoubleTap:(UITapGestureRecognizer *)gestureRecognizer
{
if (webViewIsActive) {
if (keyboardIsVisible) [webView endEditing:true];
else [self removeWebView];
} else [self addWebView];
}

- (void)addWebView {
webView = [[WKWebView alloc] initWithFrame:self.view.frame];
webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
webView.allowsBackForwardNavigationGestures = false;
webView.navigationDelegate = self;

// Do any additional setup after loading the view.
NSURL *url = [NSURL URLWithString:@"https://google.com"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestObj];

[self.view addSubview:webView];

webViewIsActive = TRUE;
}

- (void)removeWebView {
if (webView)
{
[webView stopLoading];
webView.navigationDelegate = nil;
webView.scrollView.delegate = nil;
[webView removeFromSuperview];
webView = nil;
}

webViewIsActive = FALSE;
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... stuck-open
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»