首页 > 解决方案 > 插入新的 NSAttribuitedString 时,UITextView 插入符号跳转到末尾

问题描述

我正在使用 UITextView 并尝试在此视图中实现 ol/ul 编辑器....这是迄今为止的工作方式

使用正常的插入符号

我们的编辑器首先将 HTML 内容翻译成 NSAttributedString,有了这些内容,它就可以正常工作了

<ol>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
</ol>
<br/>
<ul>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
</ul>
<br/>
<ol>
    <li>abcdef</li>
    <li>abcdef</li>
    <li>abcdef</li>
</ol>

然而,当我们在内容顶部添加一些简单的文本时,就会出现奇怪的行为。

不工作,插入符号跳错

如您所见,插入符号将在新的有序行之后以及我按下一个键时跳到末尾。看起来它正在尝试重置我之前制作的行的样式

这是它将翻译的 HTML 内容。

Just some text on top
<ol>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
</ol>
<br/>
<ul>
    <li>123456</li>
    <li>123456</li>
    <li>123456</li>
</ul>
<br/>
<ol>
    <li>abcdef</li>
    <li>abcdef</li>
    <li>abcdef</li>
</ol>
我确实注意到,每次我创建一个新的有序行并输入一个键时,它都会尝试重新格式化我当前 ol 的样式,这将使控件的属性文本发生变化。问题是我不知道这是从哪里来的。任何有关这方面的知识都会非常有帮助

标签: iosxamarinuitextview

解决方案


好吧,原来这是另一个 Xamarin 奇怪的行为....

问题是我继承自,在他们的 EditorRenderer 中,他们具有转换字符间距属性的代码,该属性将在每次代码更改时更新 AttributedText!

所以这就是为什么每次我以编程方式添加新文本(前缀 1.,2.,3. ....)后,它会触发文本更改,然后触发 AttributedText!我花了几个小时才弄清楚

这是他们在基类中实现的代码。

        protected internal override void UpdateCharacterSpacing()
    {
        var textAttr = TextView.AttributedText.AddCharacterSpacing(Element.Text, Element.CharacterSpacing);

        if(textAttr != null)
            TextView.AttributedText = textAttr;

        var placeHolder = _placeholderLabel.AttributedText.AddCharacterSpacing(Element.Placeholder, Element.CharacterSpacing);

        if(placeHolder != null)
            _placeholderLabel.AttributedText = placeHolder;
    }

推荐阅读