我正在为一个应用程序制作一个html编辑器组件(在iOS 5.0中使用带有contentEditable的UIWebView),并且陷入了如何处理UIWebView第一响应者状态
如果有人知道如何解决这个问题,我将非常感激,提前谢谢!
答案 0 :(得分:13)
以下是我在UIWebView
子类中覆盖这些方法的方法(content
是可编辑元素的id):
-(BOOL)resignFirstResponder {
[self setUserInteractionEnabled:NO];[self setUserInteractionEnabled:YES];
return [super resignFirstResponder];
}
// only works on iOS 6+
-(void)becomeFirstResponder {
self.keyboardDisplayRequiresUserAction = NO; // set here or during initialization
// important note: in some situations (newer iOS versions), it is also required to first call `blur()` on the 'content' element, otherwise the keyboard won't show up as expected
[self stringByEvaluatingJavaScriptFromString:@"document.getElementById('content').focus()"];
}
-(BOOL)isFirstResponder{
if ([[self stringByEvaluatingJavaScriptFromString:@"document.activeElement.id=='content'"] isEqualToString:@"true"]) {
return YES;
}
else {
return NO;
}
}
isFirstResponder
仅在显示键盘后返回true(例如,它将在UIKeyboardWillShowNotification处返回false)
如果这是一个问题,另一种检查UIWebView
是否是第一响应者的方法如下:
+(BOOL)isFirstResponder:(UIView *)v{
for (UIView *vs in v.subviews) {
if ([vs isFirstResponder] || [self isFirstResponder:vs]) {
return YES;
}
}
return NO;
}
-(BOOL)isFirstResponder{
return [[self class] isFirstResponder:self];
}
这样,即使在键盘动画结束(显示或隐藏)之前/之后,返回的值也将是YES
。
答案 1 :(得分:2)
我最近遇到了同样的问题,但是使用纯JavaScript解决了这个问题。实际上它不需要任何Objective-C First Responder相关方法。我只是使用JavaScript来更改UIWebView的内容 - 根据需要定位HTML元素的contentEditable属性值。
例如,使用以下代码隐藏UIWebView可编辑内容调用的键盘:
[webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('target').setAttribute('contentEditable','false')"];
希望这有帮助。 :)
答案 2 :(得分:0)
以下是我在UIWebView子类中覆盖这些方法的方法(content是可编辑元素的id):
[_webView stringByEvaluatingJavaScriptFromString:@"document.getElementById('content').focus()"];
但是Focus转到第一点而不是最后一点
答案 3 :(得分:-2)
如果要隐藏键盘,请调用以下代码行。
//wView is your UIWebView
NSString *webText = [wView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
[wView loadHTMLString:webText baseURL:nil];
答案 4 :(得分:-2)
[webView loadHTMLString:[NSString stringWithFormat:@“%@”,htmlString] baseURL:nil]; 这适用于iOS> 4