gpt4 book ai didi

ios - 在 UIWebView 中获取插入符(光标)垂直位置

转载 作者:可可西里 更新时间:2023-11-01 03:59:14 26 4
gpt4 key购买 nike

为了在内容可编辑的 UIWebView 中管理自动滚动,我需要获得正确的插入符号 Y 垂直坐标。

我确定了两种方法,使用 javascript。

第一个使用getClientRects javascript函数:

    CGRect caretRect = [self.webView stringByEvaluatingJavaScriptFromString: @"
var sel = document.getSelection();
var range = sel.getRangeAt(0).cloneRange();
range.collapse(true);
var r =range.getClientRects()[0];
return '{{'+r.left+','+r.top+'},{'+r.width+','+r.height+'}}';"];
int caretY = caretRect.origin.y;

有了这个,插入符号会一直闪烁,并且一个人会得到它正确的垂直位置,但有一个问题:当用户键入返回键时,下一行是空的,插入符号等于零,直到键入一个字符键。使该方法无法使用。

第二个插入一个 tmp 跨度,然后将其删除:

int caretY = [[self.webView stringByEvaluatingJavaScriptFromString: @"      
var sel = window.getSelection();
sel.collapseToStart();
var range = sel.getRangeAt(0);
var span = document.createElement(\"span\");
range.insertNode(span);
var topPosition = span.offsetTop;
span.parentNode.removeChild(span);
topPosition;"] intValue];

这在任何情况下都会给出正确的插入符号。但是插入符号停止闪烁,这对在屏幕上看到它毫无帮助。

有没有人知道任何方法(或这些方法的改编)可以产生以下结果:

    - get the correct caret Y in any situation
- keep the caret blinking in any situation

谢谢

最佳答案

不确定这是否为时已晚;以下对我有用。

将下面的 getCaretY() 添加到您的 js 文件中:

function getCaretY() {
var y = 0;
var sel = window.getSelection();
if (sel.rangeCount) {
var range = sel.getRangeAt(0);
if (range.getClientRects) {
var rects = range.getClientRects();
if (rects.length > 0) {
y = rects[0].top;
}
}
}
return y;
}

然后从 obj-c 文件中调用它,如下所示:

NSString *yPos = [webView stringByEvaluatingJavaScriptFromString:@"getCaretY()"];

关于ios - 在 UIWebView 中获取插入符(光标)垂直位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23491297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com