在 iOS 中,无法使用 "SelectedTextRange" 从 Started 事件更新光标位置

In iOS, Cursor position is not able to update from the Started event using the "SelectedTextRange"

描述

在 iOS 中,无法使用焦点上的“SelectedTextRange”属性 从开始的事件手动更新光标位置。请参考以下示例和屏幕截图。

重现步骤

  1. 创建自定义控件。
  2. 通过继承 UITextField 创建本机控件。
  3. 挂钩以原生方式启动事件。
  4. 使用下面的代码片段从开始的事件更新光标位置。 代码片段:
var positionToSet = this.GetPosition(this.BeginningOfDocument, 3);                      
if (positionToSet != null)                                                                
{                                                                                          
    this.SelectedTextRange = this.GetTextRange(positionToSet, positionToSet);               
}                                                                                
       (OR)
  1. 运行 附件示例。
  2. 当焦点在控件上时,光标应定位在第 3 个索引(3 旁边)。

预期行为

光标应位于第三个索引(3 旁边),如下面的屏幕截图所示。

实际行为

光标定位到最后。

样本: https://github.com/xamarin/Xamarin.Forms/files/7653944/CustomControl.zip

注: 问题仅在 iOS 设备 14.4.

或更高版本上重现

有必要排队更改,以便它发生在 Started 事件之后 returns:

CoreFoundation.DispatchQueue.MainQueue.DispatchAsync( () => {
    this.SelectedTextRange = this.GetTextRange(positionToSet, positionToSet);
});

基于.

在 iOS 模拟器上测试,iPhone 11,iOS 15.0.