防止在iOS中加载时键盘掉落

preventing keyboard drops while loading in iOS

本文关键字:键盘 加载 iOS      更新时间:2023-09-26

在我的iOS应用程序中,我需要根据用户以前的交互来关注一些文本字段。我可以很好地使用javascript进行聚焦,如下所示(在viewDidFinshLoad方法中)

if (![focusElement isEqualToString:@""]) {
    // make the keyboard freely appear without user intervention
    [webView setKeyboardDisplayRequiresUserAction:NO];
    // first lose any previous focus and then focus on
    // the previously clicked element
    NSString *jsToFocus = [NSString stringWithFormat:
                           @"document.activeElement.blur();document.getElementById(''%s'').focus();",
                           [focusElement UTF8String]];
    // javascript focuses on the input
    [webView stringByEvaluatingJavaScriptFromString:jsToFocus];

这很有效。唯一的问题是,当页面加载更多的帧/javascript时,关键板会下降,并在每次新加载时重新出现几次。我想这是由于早期的

   [webView setKeyboardDisplayRequiresUserAction:NO];

有没有(更好的)方法可以做到这一点,更重要的是,一旦键盘集中在输入元素上,就保持显示,直到用户将其驳回

提前谢谢。Nikhil

为了解决我的问题,我在web视图中引入了一个属性,称为

    @property BOOL isKeyBoardShown;

默认情况下,它设置为NO,只要没有显示keyboad,我就允许加载更多的帧/元素。然而,一旦我专注于所需的元素,我会立即将其设置为YES,并强制停止任何进一步的加载。简而言之,我的viewShouldStartLoad...方法看起来像

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest: (NSURLRequest *)request
                                                 navigationType:  (UIWebViewNavigationType)navigationType {
    if (self.isKeyBoardShown)
         return NO;
 ... further code ...

然后我介绍了键盘通知

// set up keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(keyboardWillBeHidden:)
                                             name: UIKeyboardWillHideNotification
                                           object: nil];

以及方法

- (void) keyboardWillBeHidden : (NSNotification *) keyboardHideNotice {
        self.isKeyBoardShown = NO;
}

因此,总体思路是关注元素->显示键盘->只要键盘打开就停止进一步加载->重置键盘卸载的加载权限

这很好,但现在我有进一步的问题:

如果用户完成文本输入并按下键盘上的searchgo键,因为键盘仍在上,并且isKeyboardShown属性为YES,除非用户敲击镜头(关闭键盘),否则webView不会继续搜索。

有没有一种方法可以检测到搜索键按下事件?注意,输入不是UISearchBar:(