【问题标题】:Delphi TEdit in iOS - turn off auto-caps on a per TEdit basisiOS中的Delphi TEdit - 在每个TEdit的基础上关闭自动上限
【发布时间】:2020-12-15 03:32:27
【问题描述】:

目前,iOS TEdit 在调出键盘时,会将键盘的首字母大写。

我想关闭特定 TEdit 的第一个字母的键盘自动进入大写字母。 一些 TEdits 我想保留首字母大写,例如名称。

我无法使用 TEdit.CharCase 功能,因为它强制 TEdit 中的所有输入为小写。

我想要的是用户可以输入混合大小写,但当 TEdit 第一次成为焦点时,键盘必须是小写的。

如何在 Delphi 10.4.1 中执行此操作?

【问题讨论】:

    标签: ios delphi firemonkey


    【解决方案1】:

    您可以通过更改KeyboardType 属性来控制虚拟键盘的默认行为。

    KeyboardType 属性控制虚拟键盘的视觉外观,使其最适合预期的输入(文本、URL、电话号码等),以及是否某些高级功能,如拼写、单词补全,甚至自动更正,它可以自动更正拼写错误或确保句子开头的单词以大写字母开头。

    我相信在你的情况下你想使用AlphabetKeyboardType 而不是Default

    【讨论】:

    • 将 KeyboardType 更改为 Alphabet 并不能解决此问题
    • @SilverWarior 谢谢!有用! Alphabet 类型的结果与 iOS 中的 Default 相同,但类似 ​​Email 类型的会这样做。
    【解决方案2】:

    解决此问题的一种可能方法是:

    创建一个具有公开公开的布尔引用(或添加到现有单元)的单元,例如:

    unit iOSPatch;
    
    interface
    
    var
      DisableAutoCapitalization: Boolean;
    
    implementation
    
    end.
    

    复制一份source\fmx\FMX.Platform.iOS.pas,放到工程编译路径下(如工程文件夹)

    修改 FMX.Platform.iOS 的副本,将第一步中的单元名称添加到 implementation uses 子句中,例如:

    implementation
      
    uses
      iOSPatch,
      System.Classes, System.SysUtils, System.Types, System.UITypes, System.TypInfo, System.Messaging, System.RTLConsts,
      // ... rest of uses clause snipped
    

    修改 TFMXViewBase.autocapitalizationType 方法,如下所示:

    function TFMXViewBase.autocapitalizationType: UITextAutocapitalizationType;
    begin
      if DisableAutoCapitalization or FPassword or not (FKeyboardType in [TVirtualKeyboardType.Default, TVirtualKeyboardType.Alphabet, TVirtualKeyboardType.NamePhonePad]) then
        Result := UITextAutocapitalizationTypeNone
      else
        Result := UITextAutocapitalizationTypeSentences;
    end;
    

    使用每次编辑的 OnEnter 事件根据您的需要将 DisableAutoCapitalization 设置为 True/False

    或者,如果您希望它适用于所有编辑,则可以修改 TFMXViewBase.autocapitalizationType 以将 Result 设置为 UITextAutocapitalizationTypeNone 并忽略第一步。

    很遗憾,我现在无法对此进行测试,因为我的机器上的部署出现了问题

    编辑

    我已经设法解决了我的部署问题,并测试了上面的代码,它有效。轻微的副作用:VK 上的 Shift 按钮短暂显示为“按下”

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多