ios - 插入新的 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>
解决方案
好吧,原来这是另一个 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;
}
推荐阅读
- javascript - 使用一个按钮提交多个表单很奇怪
- jenkins - 有没有办法将变量从阶段局部变量设置为 Jenkins 全局变量?
- reactjs - 间谍模块和模拟模块功能
- qpdf - 在奇数页文档的末尾合并带有额外空白页的 pdf 文件 - qpdf
- python - 检查熊猫数据框列以查找列表中的匹配项
- swift - 数组元素的绑定变量的正确数据类型是什么
- tensorflow - 修改 Keras 模型中的参数时,精度变化很小
- c# - 组合属性字段的选择表达式?
- java - Spring Boot 无法成功 POST 数据到 db (ORA-00942)
- c - 为什么我会出错?(C 中的多维数组)