我尝试使用“普通”滚动操作获取内容可编辑UIWebView
,这样当文本光标将被键盘隐藏时,UIWebView
会滚动以防止这种情况发生。我使用UIWebView
的scrollView属性从iOS developer library读取了“管理键盘”文档并且没有结果。我还在Web上发现了很多技巧,使用ScrollView属性/方法或javascript命令,但无法获得正常的滚动操作,就像MacOS上的任何NSTextView
一样。你知道解决这个问题的方法吗?
[已编辑]获得解决方案,并创建了NSTimer
触发的方法。要获得插入符Y位置,应该选择活动元素,然后插入虚拟节点。然后获取node.offsetTop属性给出了caretY。不要忘记删除节点......
答案 0 :(得分:0)
好的,这是Apple在他们的例子中做的方式(我不再记得那个项目名称):
1.您注册键盘通知(键盘每次显示或发送隐藏时都会发送通知):
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
2.获取键盘的大小(您对高度感兴趣)并滚动该视点中是否包含该点:
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
// If active text field is hidden by keyboard, scroll it so it's visible
CGRect aRect = self.view.frame;
aRect.size.height -= kbSize.height;
CGPoint point;
point = CGPointMake(0, activeTextField.frame.origin.y + activeTextField.frame.size.height);
if (!CGRectContainsPoint(aRect, point ))
{
CGPoint scrollPoint = CGPointMake(0.0, activeTextField.frame.origin.y+activeTextField.frame.size.height-kbSize.height);
[scrollView setContentOffset:scrollPoint animated:YES];
}
在隐藏键盘时不要忘记做反向操作,如果你推到另一个视图控制器,请删除观察者。 此示例与UIScrollView上的文本字段一起使用,但我确信您可以轻松地对其进行调整。
就个人而言,如果我也管理网络端,我更喜欢创建320px宽的网页,设置我的webView sizeToFit,将其添加到UIScrollView之上并管理从那里滚动。对于textFields,我只需使用javascript获取所选textField的容器并获取它的坐标。