iOS自定义键盘扩展自动大写

11

我已经设计了一个自定义的键盘扩展,可以正确输入文本。但是我似乎无法弄清何时启用大写键盘和小写键盘。这主要是因为以下函数不能正确返回之前/之后输入的文本。有时它们会返回nil,有时只返回最后几个字符等。很多时候这些方法根本没有被调用。

- (void)textWillChange:(id<UITextInput>)textInput 

- (void)textDidChange:(id<UITextInput>)textInput

我已经找到了需要启用大写键盘的以下场景:

  1. 文本长度为0或空
  2. 输入句号时,我需要添加一个空格和大写键盘
  3. 当光标放置在一个位置时,在光标之前的字符是句号或空格,并且在其之前是句号。
  4. 当用户选择整个文本“全选”时
  5. 当用户选择整个文本并删除所有内容时
  6. 当用户使用退格键并且光标前面的新字符是句号或空格,并且在其之前是句号。
  7. 当用户粘贴文本并且光标前面的字符是句号或空格,并且在其之前是句号。

此外,如果以上操作可行,是否还可以获取最后输入的“完整”单词,以便可以将其用于字典搜索,例如自动预测文本?

我已阅读了苹果文档,其中指出用户期望自动大写字母,因此我相信这应该是可能的。

https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html


你找到解决方案了吗? - Sekhar
1个回答

2

例如,textField是您的UITextField实例的名称。在初始化后放置此内容。

textField.autocaptializationType = UITextAutocapitalizationTypeSentences

这将使您提到的所有实例都有大写字母。

要使您的自定义键盘采用UITextInputTraits协议,请执行以下操作。

@interface MyCustomKeyboard : UITextInput <UITextInputTraits> //Now adopts the UITextInputTraits protocol.

 - (instancetype)init {
     self = super.init;

     if(self) {
         //Here you can set the properties that come with the protocol
         self.autocapitilizationType = UIAutocapitalizationTypeSentences;

      }
}

在制作键盘扩展应用程序时,Xcode的最大问题是记录和断点在设备上无法正常工作。测试模拟器后会再与您联系。 - sudoExclaimationExclaimation
我一直在尝试使用UITextInput,但它不是一个对象,而是一个协议。查看文档后,我没有看到任何启用UITextAutocapitalizationTypeSentences的方法。你有其他想法吗? - sudoExclaimationExclaimation
我已经尝试过:- (void)textWillChange:(id<UITextInput>)textInput { if ([textInput conformsToProtocol:@protocol(UITextInputTraits) ]) { UITextInputTraits *inputTraits = (UITextInputTraits*)textInput; inputTraits.autocaptializationType = UITextAutocapitalizationTypeSentences; } }但是这并不起作用,而且会抛出错误。 - sudoExclaimationExclaimation
除非您真正将类设置为符合协议,否则 if ([conformsToProtocol...]) 条件语句将不会评估为 true。我已更新我的答案。您希望在 init 中设置 UITextInputTraits,除非它是基于键盘状态更改的属性。自动大写应保持不变。 - NSGangster
请查看此链接:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextInputTraits_Protocol/如果您阅读第一段,您会明白为什么我通常只在我的UITextField或UITextView实例上设置属性。但是我应该意识到您可能需要出于自己的原因创建自定义键盘。 - NSGangster
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接