控制iOS Mobile Safari和/或UIWebView中的文本选择行为?

时间:2014-02-07 18:55:56

标签: html ios css uiwebview mobile-safari

我有一个包含多个段落的长HTML文档。当我尝试在iOS上的Mobile Safari或UIWebView中选择文本时,会发生以下情况:

  1. 首先,我的选择得到了字符级精度。 enter image description here
  2. 然后,当我选择更多时,精度下降到两行文本,最终到整个段落。没有办法在我想要的地方完全结束我的文本选择。 enter image description here
  3. 当我将CSS contentEditable属性设置为true时,我保留了字符级精度,但键盘也显示出来,这当然是我不想要的。

    无论我选择的文字有多长,有没有办法保留字符级选择精度?

4 个答案:

答案 0 :(得分:3)

iOS 8的WKWebView可能能够解决这个问题。 WKWebViewConfiguration有一个名为selectionGranularity的属性。评论内容如下:

  

用户可以交互式选择的粒度级别   Web视图中的内容。可能的值描述于   WKSelectionGranularity。默认值为   WKSelectionGranularityDynamic。

两个可能值中的一个是WKSelectionGranularityCharacter。评论说:

  

选择端点可以放置在任何字符边界。

我还没试过,但听起来很有希望!

2015年7月6日更新:看起来并不那么容易:Text Selection in WKWebView: WKSelectionGranularityCharacter

更新7/10/15 :当您仔细研究iOS Kindle应用时,您会发现他们已经在JavaScript中重新实现了“本机”文本选择,因为它们无法生成原生文本选择按照他们想要的方式行事。我很确定他们在决定重新实施之前必须尝试其他所有方法。

答案 1 :(得分:0)

我遇到同样的问题,

我用一行CSS来解决这个问题:

public CarInterface issueCar(DrivingLicence aLicence, CarType typeOfCar) {
        final boolean isLicenceFull = drivingLicence.getLicenceStatus();

        final Optional<CarInterface> optionalCar = availableCars.stream()
                .filter(car -> typeOfCar == car.getType())
                .findAny();

        final CarInterface car = optionalCar.orElseThrow(() -> new RuntimeException("All cars of type " + typeOfCar + " have been rented"));
        if(aLicence.getLicenceStatus() ==true){
            if(!rentals.containsKey(aLicence)){

            }else if(typeOfCar.equals(optionalCar)){

            }
        }
}

两者都适用于Safari和WebView。

答案 2 :(得分:-2)

由于您还要选择文本标题,浏览器会将其识别为完整文本并选择整个段落。 顺便说一句,如果没有看到HTML源代码,就无法帮助您!

答案 3 :(得分:-3)

嘿,您可以使用CSS属性不让用户选择文本。 您可以使用:

html
{
   user-select:none;
}