【发布时间】:2022-01-10 12:11:37
【问题描述】:
说明
在 iOS 中,无法使用焦点上的“SelectedTextRange”属性从启动事件手动更新光标位置。请参考以下示例和屏幕截图。
复制步骤
- 创建自定义控件。
- 通过从 UITextField 继承来创建原生控件。
- Hook 以原生方式开始活动。
- 使用下面的代码 sn-p 从启动事件更新光标位置。 代码片段:
var positionToSet = this.GetPosition(this.BeginningOfDocument, 3); if (positionToSet != null) { this.SelectedTextRange = this.GetTextRange(positionToSet, positionToSet); }
(OR)
- 运行附加的示例。
- 光标应位于第三个索引(3 旁边),同时关注控件。
预期行为
实际行为
示例: https://github.com/xamarin/Xamarin.Forms/files/7653944/CustomControl.zip
注意: 问题仅在 iOS 设备 14.4 或更高版本上重现。
【问题讨论】:
-
UI 更新应该在主线程中进行
-
@LeoDabus - OP 正在描述在 iOS.UITextView.Started 事件上运行的代码。我已经测试过,当此代码运行时,Xamarin.Essentials.MainThread.IsMainThread 为真。任何其他想法它可能是什么?我已经用断点确认 SelectedTextRange 被自定义代码更新为(位置 3,长度 0)。 (在模拟器上,iPhone 11 iOS 15.0)试图思考这如何无法影响显示。
-
我很确定您需要在设置范围之前将队列分派到主线程
-
@LeoDabus 啊对。它在主线程上,但在一个动作的中间。如您所说,需要将其排队到主线程。
标签: ios swift xamarin.forms xamarin.ios uitextfield