【问题标题】:UITextView - InsertText doesn't auto-correct or auto-capitalizeUITextView - InsertText 不会自动更正或自动大写
【发布时间】:2014-10-31 06:48:55
【问题描述】:

我在UITextView 上有一个自定义InputView,并启用了自动更正和自动大写。

我的自定义输入视图有一堆UIButtons,它们在UITextView 上调用InsertText。这适用于在当前光标位置插入文本。问题是在调用InsertText 时自动更正和自动大写不起作用。如果通过蓝牙键盘或标准键盘输入,一切正常。

我可以调用UITextView 来使自动更正/自动大写无效吗? SetNeedsDisplay 是我的第一次尝试,但没有效果。此外,我的应用可能是 iOS 7 或更高版本,因此可以使用更新的文本 API。

*注意:我使用的是 MonoTouch (Xamarin.iOS),但欢迎使用 Objective-C 答案。

【问题讨论】:

  • 这是一个很长的镜头,但是如果您可以模拟按键事件,您就可以重现您想要插入的文本。不过,这不是一个非常优雅的解决方案。
  • 是的,这就是我想做的。哪些 API 可以让我这样做?
  • 我找到了以下文章。但我担心该应用程序会被Apple拒绝。 blog.lazerwalker.com/blog/2013/10/17/…
  • 很遗憾,我正在寻找 App Store 批准的选项...不能使用私有 API。
  • 很抱歉听到这个消息。如果您找到解决方案,请给我们更新。

标签: c# ios objective-c xamarin.ios uitextview


【解决方案1】:

如果没有滚动您自己的自动更正系统,则并非如此。 iOS 自动更正系统对开发人员来说是不透明的,并且仅适用于键盘输入。每当您在输入或文本视图上显式设置 .text 属性时,您设置的值就是将出现的值。

【讨论】:

  • 实现自己的inputView的推荐方法是什么?只需拨打insertText,自动更正不起作用?就我而言,我正在用自定义键盘替换系统键盘。
  • 哦,我明白了。是的,我不确定最好的方法。祝你好运:)
【解决方案2】:

好的,我找到了一种可行的方法:

  • 实现你自己的NSTextStorage
  • 设置NSLayoutManagerNSTextContainer 以协调您的NSTextStorageUITextView
  • 以编程方式修改您的 NSTextStorage 子类时,自动更正“正常工作”

我认为这是可行的,因为修改 NSTextStorage 会触发事件,通知 UITextView 以更新诸如自动更正之类的内容。它仅适用于 iOS 7 及更高版本。

【讨论】:

  • 我想了解更多关于这个答案的详细信息 :) 你能发布演示代码吗?
  • 我已经完成了所有的步骤,并按顺序将NSAttributedString 附加到 NSTextStorage,@"t"、@"e"、@"s"、@"t"、@ "t", @" " 并通过 NSTextContainer 发送到 UITextView 并且 UITextView 更新为 "t" --> "te" --> "tes" --> "test" --> "testt" -- > "testt" 并且始终没有任何自动更正。 ?
  • 你是在 UITextView 上调用 insertText 吗?我检查了我们的应用程序,这就是我们正在做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
相关资源
最近更新 更多