【问题标题】:How to auto upper-case text for Editor/Entry in Xamarin Forms in iOS 11.4如何在 iOS 11.4 中为 Xamarin 表单中的编辑器/条目自动大写文本
【发布时间】:2018-08-20 09:11:11
【问题描述】:

在 iOS 11.2 版本中,我使用此代码设置自动大写文本。运行正常。

Xamarin.Forms:

public static readonly BindableProperty HasAutoUpperCaseTextProperty =
         BindableProperty.Create(
             nameof(HasAutoUpperCaseText),
             typeof(bool),
             typeof(EditorExtend),
             false);
 
     public bool HasAutoUpperCaseText
     {
         get { return (bool)GetValue(HasAutoUpperCaseTextProperty); }
         set { SetValue(HasAutoUpperCaseTextProperty, value); }
     }

在 iOS 渲染器中:*

Control.AutocapitalizationType = UITextAutocapitalizationType.AllCharacters;

问题:

我将iPAD的OS版​​本升级到iOS 11.4后,运行不正常。

你遇到过这个问题吗?如何在 iOS 11.4 中修复它?

更新:

我发现问题,自动大写(转到设置 -> 常规 -> 键盘)被禁用。所以iPAD设备需要开启item Auto-Capitalization才能使用大写字符。

【问题讨论】:

  • 您只是希望它与 iOS 或两者一起工作?
  • 我使用了 Xamarin.Forms。但这个问题仅限于 iOS。

标签: ios xamarin.forms xamarin.ios uppercase


【解决方案1】:

*在 iOS 渲染器中:

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        if (Control != null)
        {
            var nativeTextField = (UITextField)Control;

            nativeTextField.EditingChanged += (object sender, EventArgs args) =>
            {
                nativeTextField.Text = nativeTextField.Text.ToUpper();
            };

        }
    }

【讨论】:

  • 谢谢,我试过这个解决方案。但是当用户快速输入时,它会丢失一些字符。此外,如果用户正在打字,他们将无法在软键盘顶部使用预测(建议)单词。
  • 我没有发现任何快速打字的问题。也许它与 T9 插入有关,在这种情况下你只需要为这个“粘贴”事件找到适当的事件,仍然保留上面的代码。
【解决方案2】:

对于 iOS 平台:

 [assembly: ExportEffect(typeof(EntryCapitalizeKeyboard), "EntryCapitalizeKeyboard")]
namespace YourProject.Platform.iOS.Renderers
{
    [Preserve(AllMembers = true)]
    public class EntryCapitalizeKeyboard : PlatformEffect
    {
        private UITextAutocapitalizationType _old;

        protected override void OnAttached()
        {
            var editText = Control as UITextField;
            if (editText == null)
                return;

            _old = editText.AutocapitalizationType;
            editText.AutocapitalizationType = UITextAutocapitalizationType.AllCharacters;
        }

        protected override void OnDetached()
        {
            var editText = Control as UITextField;
            if (editText == null)
                return;

            editText.AutocapitalizationType = _old;
        }
    }
}

【讨论】:

    【解决方案3】:

    以防万一其他人遇到此问题,在 XAML 中将 Keyboard = "Chat" 添加到您的编辑器会自动执行此操作。我认为它也适用于所有平台。 您还可以根据需要尝试其他键盘选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 2019-10-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2019-02-25
      • 2018-08-01
      相关资源
      最近更新 更多