防止在iOS中加载时键盘掉落
preventing keyboard drops while loading in iOS
在我的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;
}
因此,总体思路是关注元素->显示键盘->只要键盘打开就停止进一步加载->重置键盘卸载的加载权限
这很好,但现在我有进一步的问题:
如果用户完成文本输入并按下键盘上的search
或go
键,因为键盘仍在上,并且isKeyboardShown
属性为YES
,除非用户敲击镜头(关闭键盘),否则webView不会继续搜索。
有没有一种方法可以检测到搜索键按下事件?注意,输入不是UISearchBar
:(
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- 如何在生成下载文件时显示加载动画
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 无法在通过jQuery的ajax加载的页面中执行javascript
- Emberjs应用程序加载在除Index之外的所有路由上
- 在chrome.tabs.onCreated之后加载HTML页面
- 单击F5时如何停止页面加载
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 跟踪在页面加载时应用内联样式的JavaScript
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- jQuery Lazy加载动画滚动
- Html页面上的多个Base64图像和平滑加载
- 如何创建带有插槽的vue js组件预加载程序
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 如何使该数据在所有元素中加载
- Chrome扩展没有't在重新加载之前考虑期权价值
- 使用javascript在Flash中加载外部图像
- Ajax文件加载和<输入>文件加载
- 防止在iOS中加载时键盘掉落
- Chrome扩展:如何使用键盘事件从任何地方重新加载选项卡