【问题标题】:preventing keyboard drops while loading in iOS防止在 iOS 中加载时键盘掉落
【发布时间】:2013-09-07 09:41:49
【问题描述】:

在我的 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];

有没有(更好的)方法可以做到这一点,更重要的是,一旦关注输入元素,就保持键盘显示,直到用户关闭它。

提前致谢。 尼基尔

【问题讨论】:

    标签: javascript ios objective-c


    【解决方案1】:

    为了解决我的问题,我向 Web 视图引入了一个属性,称为它

        @property BOOL isKeyBoardShown;
    

    默认情况下,它设置为 NO,只要不显示键盘,我就允许加载更多帧/元素。但是,一旦我专注于所需的元素,我会立即将其设置为 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: (

    【讨论】:

      猜你喜欢
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 2015-03-28
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多