在 iOS 中,无法使用 "SelectedTextRange" 从 Started 事件更新光标位置
In iOS, Cursor position is not able to update from the Started event using the "SelectedTextRange"
描述
在 iOS 中,无法使用焦点上的“SelectedTextRange”属性 从开始的事件手动更新光标位置。请参考以下示例和屏幕截图。
重现步骤
- 创建自定义控件。
- 通过继承 UITextField 创建本机控件。
- 挂钩以原生方式启动事件。
- 使用下面的代码片段从开始的事件更新光标位置。
代码片段:
var positionToSet = this.GetPosition(this.BeginningOfDocument, 3);
if (positionToSet != null)
{
this.SelectedTextRange = this.GetTextRange(positionToSet, positionToSet);
}
(OR)
- 运行 附件示例。
- 当焦点在控件上时,光标应定位在第 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.
描述
在 iOS 中,无法使用焦点上的“SelectedTextRange”属性 从开始的事件手动更新光标位置。请参考以下示例和屏幕截图。
重现步骤
- 创建自定义控件。
- 通过继承 UITextField 创建本机控件。
- 挂钩以原生方式启动事件。
- 使用下面的代码片段从开始的事件更新光标位置。 代码片段:
var positionToSet = this.GetPosition(this.BeginningOfDocument, 3); if (positionToSet != null) { this.SelectedTextRange = this.GetTextRange(positionToSet, positionToSet); }
(OR)
- 运行 附件示例。
- 当焦点在控件上时,光标应定位在第 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.