在 UITextfield 中,当使用 NSMutableAttributedString 应用颜色时,颜色在取消聚焦时应用不正确

In UITextfield, When applying color using NSMutableAttributedString the color is not applied correctly when unfocusing

使用 NSMutableAttributedString,我使用 UITextfield 为字符串中的特定字符应用了颜色。我的代码:

uITextField = new UITextField(); uITextField.BackgroundColor = UIColor.LightGray;
uITextField.Frame = new CGRect(10, 150, 350, 40);
uITextField.Text = "Hai i am ________________";
uITextField.TextColor = UIColor.Green;
uITextField.EditingChanged += UITextField_EditingChanged;

private void UITextField_EditingChanged(object sender, EventArgs e)
    {
        var promptStringAttributes = new UIStringAttributes
        {
            ForegroundColor = UIColor.Red
        };
        var promptString = new NSMutableAttributedString(uITextField.Text);
        char[] mText = uITextField.Text.ToCharArray();
        Char prchar = '_';
        for (int i = 0; i < mText.Length; i++)
        {
            if (!string.IsNullOrEmpty(uITextField.Text) && prchar == mText[i])
            {
                promptString.SetAttributes(promptStringAttributes.Dictionary, new NSRange(i, 1));
            }
        }
        uITextField.AttributedText = promptString;
    }

最初,文本将为绿色。见下图:

删除UItextfield中的最后一个字符后,我将某些字符的颜色更改为红色

我面临的问题是在 UITextfield 取消焦点后,红色应用于 UITextField 中的所有字符,文本颜色显示不正确。只有设置的属性颜色适用于字符串中的所有字符。见下图:

请给出一个可能的解决方案,以限制在 xamarin 中取消对 UITextField 的关注时对所有字符串应用设置的属性颜色 iOS。

改进你的方法

var promptStringAttributes_Red = new UIStringAttributes
{
   ForegroundColor = UIColor.Red
};
var promptStringAttributes_Green = new UIStringAttributes
{
   ForegroundColor = UIColor.Green
};
var promptString = new NSMutableAttributedString(uITextField.Text);
char[] mText = uITextField.Text.ToCharArray();
Char prchar = '_';
for (int i = 0; i < mText.Length; i++)
{
  if (!string.IsNullOrEmpty(uITextField.Text) && mText[i] ==prchar)
  {
    promptString.SetAttributes(promptStringAttributes_Red.Dictionary, new NSRange(i, 1));
  }

  else
  {
     promptString.SetAttributes(promptStringAttributes_Green.Dictionary, new NSRange(i, 1));
  }
}
uITextField.AttributedText = promptString;