问题标签 [uitextinput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 在 UITextField 中获取一系列选定文本,因为 NSRange 是 iOS 4
我一直在使用 UITextInput 协议中的 selectedTextRange 和 beginOfDocument 属性,但正如我刚刚在下面的帖子中了解到的那样,UITextField 仅开始遵守 iOS 5 中的 UITextInput 协议,因此我的应用程序在 iOS 4.3 中崩溃。我需要另一种方法在 iOS 4.3 中执行此操作。
UITextField 和 UITextView 的 UITextInput 协议用于管理崩溃中的选择结果。
这是我现在正在做的事情(self 是我的 UITextField 子类):
ios - 如何以编程方式关闭 UITextView 中的自动更正弹出框?
我正在自己做一些自定义的自动完成的东西insertText:
,但是如果有一个可见的自动更正建议,视图就会进入一个奇怪的状态。
如果我使用[textView unmarkText]
,它会关闭自动更正弹出窗口——但它接受自动更正(这很糟糕)。有没有办法以编程方式拒绝自动更正建议?
我目前的“解决方案”有效,但它很粗俗,而且我没有理由认为它会在未来继续有效。有一个更好的方法吗?
ios - 使用 Core Text 重新实现 UITextView 和 UITextField
是否有对Core Text的开源重新实现UITextView
和使用?UITextField
Apple 的SimpleTextInput带有SimpleCoreTextView
和EditableCoreTextView
类,它明确表示:
换句话说,它不处理例如阿拉伯语,并且效率低下。
对于基于核心文本和UITextInput
协议族的可编辑文本字段或文本视图的完整实现,我们有哪些替代方案?
ios - 何时调用 -[UITextInput selectionRectsForRange:]?
我有一个带有实现 UITextInput 协议的自定义文本编辑器的应用程序。在 iOS 6 中,Apple 向协议中添加了一种新的必需方法:
我已经实现了这个,但我似乎找不到触发它的方法。至少在我的应用程序的工作方式上,它似乎永远不会被文本系统调用。有谁知道它是干什么用的?
uitextview - 在富 UITextView (iOS 6) 中使用 NSUndoManager 撤消操作
我想更改富 UITextView (iOS 6) 的部分或全部属性文本,并允许用户撤消更改。
阅读NSUndoManager 文档后,我尝试了第一种方法:
我希望撤消操作很简单:
声明此方法:
通过调用更改我的 UITextView 中的文本:
但是在这样做之后,NSUndoManager 说它无法撤消。
所以我尝试了第二种方法:
声明:
并更改文本:
之后,NSUndoManager 也表示无法撤消。
为什么?
请注意,当触发将更改属性文本的代码时,用户正在编辑 UITextView。
一种解决方法是直接通过 UITextInput 协议方法替换文本。下面的方法还是挺方便的,但是我还没有找到 NSAttributedString 的等价物。我错过了吗?
这里建议的 hack 是模拟粘贴操作。如果可能的话,我宁愿避免这种情况(还没有理由,只是觉得太脏了,以后不回来咬我)。
objective-c - UITextInput - 返回不正确的“beginningOfDocument”和“endOfDocument”是否可以?
我正在使用 Core Text 在 iOS 中创建自己的文本编辑器。几乎所有东西都很好,除了一个例外:当文本文档“大”时,东西真的开始变慢。我发现 iOS 在每次更改时都请求整个文档文本,包括选择更改(至少,当我通知 UITextInputDelegate 选择更改时)。部分问题是我已经优化了我的核心文本代码,将文档拆分为段落并仅呈现更改的段落。但是这样做也会将文档字符串(即 a NSAttributedString
)拆分为单独的“段落对象”。因此,当 iOS 请求整个文本文档时,我必须将所有这些字符串组合成一个字符串,这需要时间和内存。
我的解决方案是为 iOS 提供不正确UITextPosition
的 'beginningOfDocument
和endOfDocument
方法,将这些位置限制在与当前选择相交的段落中。这实际上工作得很好。iOS 现在只请求更改当前段落,这完全消除了减速。
到目前为止,一切都很好,但我有点担心这可能会破坏某些东西。我对此进行了一些测试,没有任何问题,但是文本编辑器可能很难测试(谁知道它是否会在某些边缘条件下中断)。
我有两个问题:
- iOS 是否应该在每次更改时请求整个文档文本?如果不是,那么可能是我的协议方法中的其他方法
UITextInput
返回了错误的值,从而导致 iOS 请求整个文档。 - 有谁知道这是否真的会破坏任何东西?
user-input - 字段大小:ems('W's or 'm's)的自然语言比例
多年来,这对我来说一直是一个两难的境地,我只是想问一下。
假设我有一个字符限制,input
或者textarea
我想允许足够的可见区域供用户输入最大数量的字符。
限制:10
iiiiiiiii
对比
万维网
最初我会根据 lorum 或随机文本猜测大小。
如果您考虑清楚:最大大小基于em
文本中的大小字符数。
所以我经历了一个使最小可见字段大小em
x 字符限制的阶段,尽管这显然是荒谬的,因为不可能构建一个完全由 'w's 和 'm's和 textareas 组成的句子变得愚蠢地大。
所以我的问题是:你可以在一个句子中放入的绝对最大的字符是什么? em
或者您将如何查找这些信息?作为一名开发人员,我在这里提出了问题,但是是否存在会知道的语言人员溢出?
会是土拨鼠吗?:
如果土拨鼠会扔木头,土拨鼠会扔多少木头?土拨鼠会扔掉他能扔掉的所有木头,如果土拨鼠会扔掉木头的话。
这里的比例是14(ems)/155(chars)
——比如说不到 10%。
有没有更多的技术方法来确定这一点?是否有一些异常情况会超过这约 10%(比如 www.www.com)?
希望有了这些信息,我可以使输入/文本区域大致与需要的一样大:不更大;不小。
objective-c - 自定义文本字段 - 镜像自动更正
我正在使用 CoreText 实现自定义 UITextView(基于 EGOTextView)并符合UITextInput
协议。除了一件烦人的事情外,我几乎所有东西都运行良好(呸!)。自动更正建议文本垂直镜像,其突出显示略微向右移动。这是它的样子:
在文本字段中,我输入了“helo”,它会自动更正为“帮助”。如您所见,自动更正文本(而不是其背景)是垂直镜像的。此外,它向右水平偏移约 7pt。
为了解决第二个问题(水平偏移),我已经验证该firstRectForRange:
方法返回正确的CGRect
. 我已经通过两种方式做到了这一点。第一个是目视检查当我显示 a 时UIMenuController
它是否出现在正确的位置(确实如此)。二是围绕CGRect
返回的 by画一个轮廓firstRectForRange:
。这是与CGRect
概述相同的文本。
如您所见,正确的区域被勾勒出来,但自动更正被错误地标记/突出显示。
我很乐意分享任何代码,但这是一个庞大的课程,我现在很困惑。任何指针将不胜感激!
编辑:源代码可在此存储库的 Experimental 分支上找到:github.com/cbrauchli/EGOTextView。
uitextfield - 日文输入控制
我有以下问题,关于如何在 iOS 应用程序中精细控制日语输入。为了清楚起见,我在这篇文章中包含了一张图片(见下文)。
如您所见,我在输入文本字段中输入了や,键盘上方出现了一堆选项(や 役 矢訳 ヤ 屋焼き …)以进行可能的转换。
以下是我想知道的:图片中显示的选择对我的特定应用程序没有意义。我希望能够为自己设置提供给用户的可能转换。在这种情况下,它会是(山形県 山口県 山梨県)。有谁知道我怎么能做到这一点?
换句话说,我试图找出如何处理出现在键盘上方的数据集。
提前感谢您提供任何相关信息。
iphone - 如何对 NSUndoManager+UITextInput 的击键进行分组
我有一个实现 UITextInput 的视图,并添加了对撤消的支持。现在,每个单独的击键或退格键都被记录为可撤消的事件。
我知道我可以对事件进行分组,并且可以在第一次击键时打开一个撤消组。但是我该去哪里关闭这个小组呢?如果当用户摇动设备时该组是打开的,我会得到一个例外。撤消时,您不能有一个打开的组。
我会以某种方式需要在 NSUndoManager 实例显示操作菜单之前关闭打开的组。
我是否需要继承 NSUndoManager 才能做到这一点?或者有人知道如何在操作之前及时关闭输入撤消组吗?
注意:第一响应者在显示撤消操作时不会辞职。
实际上,在我看来,普通文本输入会以某种方式打开打字组,因为如果您取消撤消/重做警报,那么您可以继续打字,所有这些击键随后都可以一起撤消。
我想我不明白何时分组操作以及是否以及何时需要关闭一个组。
更新:我发现以下工作正常:我创建了一个 NSUndoManager 的子类,它跟踪打开组的数量。在 -undo 我正在关闭所有打开的组以避免异常,然后调用[super undo]
每当一个新操作开始时,比如更改段落样式,我都会调用[self.undoManager closeAllOpenGroups]
这会导致关闭输入的撤消组。
在-deleteBackward:
and-insertText:
方法中,我知道需要启动一个新的打字块:
现在这不是太多额外的代码,但我希望不必使用我自己的 DTUndoManager 子类......所以我愿意接受建议。