c# Xamarin UITextField 设置光标位置

标签 c# ios xamarin uitextfield

我需要将 UITextField 的光标定位在与另一个先前文本字段完全相同的位置。我将光标在第一个文本字段中的位置作为 nint index = txtToField.GetOffsetFromPosition(txtToField.BeginningOfDocument, txtToField.SelectedTextRange.Start);,它正确地从开头获取字符数我的光标当前所在的文本字段。经过一些研究,并使用以下问题:

Setting cursor position of UITextField

我尝试使用我之前获得的索引来实现问题的解决方案,以在文本字段中设置光标位置。这是行不通的,在将文本字段设置为第一响应者并运行之后:

txtTo.BecomeFirstResponder();
UITextPosition positionSet = txtTo.GetPosition(txtTo.BeginningOfDocument, position);
txtTo.SelectedTextRange = txtTo.GetTextRange(positionSet, positionSet);

它会自动将光标放在 UITextField 的末尾。此外,我尝试检查 SelectedTextRange 方法是否按预期工作,但是当尝试将文本字段中的所有文本设置为选中时:

txtTo.BecomeFirstResponder();
txtTo.SelectedTextRange = txtTo.GetTextRange(txtTo.BeginningOfDocument, txtTo.EndOfDocument);

它还会自动将光标置于 UITextField 的末尾,这是 BecomeFirstResponder() 的标准行为。 SelectedTextRange 在当前版本的 Xamarin 中不起作用吗?

我使用的是 Xamarin 版本 7.6.10(内部版本 27)和 Xamarin.iOS 版本 12.0.0.15。

最佳答案

原因: 光标位于默认文本的末尾。当您初始化 UITextField 并将其设置为方法 ViewDidLoad 中的 FirstResponder 时。 View 仍未完成初始化。

解决方案: 您可以在 EditingStarted 方法中调用这些方法。并且不要忘记设置委托(delegate)。

public partial clas xxxViewController:UIViewController,IUITextFieldDelegate

txtTo.WeakDelegate=this;

[Export("textFieldDidBeginEditing:")]
public void EditingStarted(UITextField textField)
{
  NSRange range = new NSRange(index, 0);
  UITextPosition start = textField.GetPosition(textField.BeginningOfDocument, range.Location);
  UITextPosition end = textField.GetPosition(start, range.Length);
  textField.SelectedTextRange = textField.GetTextRange(start, end);
} 

如果你确实想在 ViewDidLoad 中调用它们。你可以设置延迟(例如 0.1s)。

//...
this.PerformSelector(new Selector("MoveCursorPosition:"),txtTo,0.1);
//...

[Export("MoveCursorPosition:")]
public void MoveCursorPosition(UITextField textField)
{
  NSRange range = new NSRange(index, 0);
  UITextPosition start = textField.GetPosition(textField.BeginningOfDocument, range.Location);
  UITextPosition end = textField.GetPosition(start, range.Length);
  textField.SelectedTextRange = textField.GetTextRange(start, end);
}

关于c# Xamarin UITextField 设置光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083394/

相关文章:

ios - 如何在 swift 中使用 ObjectMapper 将值从 String 向下舍入为 Double

c# - listView.SelectedItemPosition 始终返回 -1

c# - 将数据从 fragment 发送到 Activity android C#

c# - C# ConcurrentDictionary InvalidOperationException

c# - 使用 C# 和 Linq 动态生成 kml 文件

javascript - 创建搜索栏 C# MVC

ios - 从 ARSCNFaceGeometry 中提取人脸特征

c# - 操作数永不为空警告

ios - 解析本地数据存储 : Unpin objects seems broken in Swift

c# - ScrollView 在 Xamarin Forms 中的另一个 ScrollView 中