在UIWebView中管理垂直滚动

时间:2012-04-10 23:34:12

标签: ios uiwebview scroll rich-text-editor

我尝试使用“普通”滚动操作获取内容可编辑UIWebView,这样当文本光标将被键盘隐藏时,UIWebView会滚动以防止这种情况发生。我使用UIWebView的scrollView属性从iOS developer library读取了“管理键盘”文档并且没有结果。我还在Web上发现了很多技巧,使用ScrollView属性/方法或javascript命令,但无法获得正常的滚动操作,就像MacOS上的任何NSTextView一样。你知道解决这个问题的方法吗?

[已编辑]获得解决方案,并创建了NSTimer触发的方法。要获得插入符Y位置,应该选择活动元素,然后插入虚拟节点。然后获取node.offsetTop属性给出了caretY。不要忘记删除节点......

1 个答案:

答案 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的容器并获取它的坐标。