4

我尝试通过UIWebView“正常”滚动操作获得可编辑的内容,以便当文本光标将被键盘隐藏时,UIWebView滚动以防止这种情况发生。我使用我的UIWebView. 我还在网上发现了许多技巧,使用 ScrollView 属性/方法或 javascript 命令,但无法获得正常的滚动操作,例如NSTextViewMacOS 上的任何操作。你知道这个问题的任何解决方案吗?

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

4

1 回答 1

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 上的文本字段一起使用,但我相信您可以轻松适应它。

就个人而言,如果我还管理 Web 端,我更喜欢创建 320 像素宽的网页,设置我的 webView sizeToFit,将其添加到 UIScrollView 顶部并从那里管理滚动。对于 textFields,我只需使用 javascript 获取所选 textField 的容器并获取它的坐标。

于 2012-09-04T14:54:03.873 回答