2

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

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

提前致谢。尼基尔

4

1 回答 1

0

作为解决我的问题的方法,我在 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-09-04T20:52:10.357 回答