天道酬勤,学无止境

How to figure out the current caret position in a UITextField?

问题

我想以编程方式将字符串粘贴到当前插入符号位置的文本字段或文本视图中。

是否有捷径可寻? 我需要知道当前插入符号的位置,但没有办法检索它,对吧? 不想调用私有 API。 有什么合法的方法可以做到吗?

回答1
回答2

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • How to figure out the current caret position in a UITextField?
    I want to programmatically paste a string into a text field or text view at the current caret position. Is there an easy way to do this? I would need to know the current caret position, but there's no method to retrieve it, right? Don't want to call private API. Is there any legal way to do it?
  • 隐藏 UITextField 的光标(Hide the cursor of an UITextField)
    问题 我使用UITextField和UIPickerView作为其inputView ,以便当用户点击文本字段时,会召唤一个选择器供他们选择一个选项。 几乎一切正常,但我有一个问题:当文本字段处于活动状态时,光标仍会在文本字段中闪烁,这很丑陋且不合适,因为不希望用户在该字段中键入内容并且没有显示键盘。 我知道我可以通过在文本字段上将editing设置为NO并跟踪对其的触摸,或者用自定义样式的按钮替换它,并通过代码召唤选择器来解决这个问题。 但是,我想对文本字段上的所有事件处理使用UITextFieldDelegate方法,并且诸如用按钮替换文本字段之类的技巧不允许这种方法。 我怎样才能简单地隐藏UITextField上的光标? 回答1 只需将UITextField子类化并覆盖caretRectForPosition - (CGRect)caretRectForPosition:(UITextPosition *)position { return CGRectZero; } 回答2 从 iOS 7 开始,您现在可以在 textField 上设置tintColor = [UIColor clearColor]并且插入符号将消失。 回答3 您可以清除文本字段的 tintColor self.textField.tintColor = [UIColor clearColor]; 斯威夫特
  • 在secureTextEntry切换后,UITextField的尾部带有空格(UITextField has trailing whitespace after secureTextEntry toggle)
    问题 我有一个在显示/隐藏模式之间切换的按钮(即,在secureTextEntry NO和YES之间切换UITextField)。 目的是允许用户看到他们输入的密码。 我在这里遵循了示例(票数最高):UITextField secureTextEntry-工作从YES变为NO,但是改回YES无效 但是,当我将secureTextEntry设置为NO时,在此处写入的所有文本均以结尾处带有空格结尾。 将secureTextEntry设置为YES时,这似乎不是问题。 例如,如果在setSecureTextEntry设置为NO时输入文本“ mypassword”,然后将其切换为YES,则用户将看到**********(10个点),这是正确的。 如果将SecureeTextEntry设置为NO,则用户将看到“ mypassword”(末尾有空格,或者至少光标向右移动了一个空格)。 重要说明:在调试器中,文本的字符串值显示时没有尾随空格,如下所示: (lldb) expr self.passwordText.text (NSString *) $0 = 0x1d8450e0 @"mypassword" 我曾尝试修剪空白(请避免在UITextField中使用中间空白),但是它没有任何效果。 回答1 我刚刚遇到这种情况,终于解决了这个问题。 适用于最新的iOS SDK,iOS 8.1 首先
  • UITextField 中的 UITextPosition(UITextPosition in UITextField)
    问题 有什么方法可以让我通过文本字段的 UITextRange 对象获得 UITextField 的当前插入符号位置吗? UITextField 返回的 UITextRange 是否有任何用处? UITextPosition 的公共接口没有任何可见的成员。 回答1 我昨晚面临同样的问题。 事实证明,您必须在 UITextField 上使用 offsetFromPosition 来获取所选范围的“开始”的相对位置才能计算出位置。 例如 // Get the selected text range UITextRange *selectedRange = [self selectedTextRange]; //Calculate the existing position, relative to the beginning of the field int pos = [self offsetFromPosition:self.beginningOfDocument toPosition:selectedRange.start]; 我最终使用了 endOfDocument,因为在更改文本字段后更容易恢复用户的位置。 我在这里写了一篇博文: http://neofight.wordpress.com/2012/04/01/finding-the-cursor-position-in-a
  • Weird behaviour of Caret/Cursor in UITextField
    (Xcode10.1 ,Swift, iOS 11&12) Question: How to increase height of caret/cursor in UITextField What i've tried so far: i've done this, and problem solved. class BPTextField: UITextField { override func caretRect(for position: UITextPosition) -> CGRect { //CGRect rect = [super caretRectForPosition:position]; var rect = super.caretRect(for: position) let h = self.frame.height - 5 let y_ = (self.frame.height - h)/2 rect.origin.y = y_ rect.size.height = h; return rect; } } but, when i changed Keyboard Language (from English-India to Japanese-Kana) and type single character , the caret/cursor moves
  • 防止在 UITextField 中编辑文本并在使用 inputView 时隐藏光标/插入符号/放大镜(Prevent editing of text in UITextField and hide cursor/caret/magnifying glass while using an inputView)
    问题 我如何防止在UITextField编辑文本以及隐藏光标/插入符号/放大镜,但仍然显示键盘,因为我使用带有UIPickerView / UIDatePickerView的inputView ? 将userInteractionEnabled设置为NO不起作用,因为它不再接收任何触摸并且不会显示键盘。 回答1 子类 UITextField //Disables caret - (CGRect)caretRectForPosition:(UITextPosition *)position { return CGRectZero; } //Disables magnifying glass -(void)addGestureRecognizer:(UIGestureRecognizer *)gestureRecognizer { if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]) { gestureRecognizer.enabled = NO; } [super addGestureRecognizer:gestureRecognizer]; } 在你的 UITextFieldDelegate 中 //Prevent text from being copied and pasted
  • iPhone:禁用“双击空格键。” 捷径?(iPhone: Disable the “double-tap spacebar for .” shortcut?)
    问题 默认情况下,如果在iPhone或iPad上点按两次空格键,则不会得到“”(两个空格),而是得到“。”(一个句点后跟一个空格)。 有什么方法可以在代码中禁用此快捷方式吗? 更新:通过UITextInputTraits禁用自动更正不起作用。 更新2:知道了! 请参阅下面的我的帖子。 回答1 我有一个基于以上Chaise给出的答案。 Chaise的方法不允许您依次键入两个空格-在某些情况下这是不希望的。 这是一种完全关闭自动周期插入的方法: 迅速 在委托方法中: func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { //Ensure we're not at the start of the text field and we are inserting text if range.location > 0 && text.count > 0 { let whitespace = CharacterSet.whitespaces let start = text.unicodeScalars.startIndex let location = textView.text.unicodeScalars.index
  • 如何模拟 UITextField 上的删除键?(How to simulate the delete key on UITextField?)
    问题 我正在 iPad 上创建一个应用程序。 我使用UITextField的inputView属性创建了一个自定义键盘。 要在光标位置插入文本,我使用复制和粘贴方法 (http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html),效果很好。 现在,我想创建删除键。 我正在使用的代码是: if (textField.text.length > 0) { textField.text = [textField.text substringToIndex:textField.text.length-1]; } 但是,您可能知道,无论光标在哪里,它都只会删除最后一个字符。 有谁知道更好的解决方案? 非常感谢你! 回答1 只需调用[textField deleteBackward] 。 它会为您处理光标位置和突出显示。 回答2 我懂了! 这是我对shouldChangeCharactersInRange方法的委托方法实现。 - (BOOL) textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange) range replacementString:(NSString *) string { if ([string
  • 在 Xorg 下获取插入符号(输入文本光标)的 X/Y 位置?(Get X/Y position of caret (input text cursor) under Xorg?)
    问题 我想在 X 上运行的任何 Linux 应用程序(GTK、Qt、Electron 等)中,在用户正在输入的位置的正上方显示一个弹出框。 我想出了创建弹出框的方法,现在我想弄清楚如何获取输入文本光标(键入时闪烁的内容,不确定它是否称为“插入符号”?)相对于屏幕的坐标。 我知道我可以使用xdotool获取有关鼠标位置的信息: xdotool getmouselocation 我需要同样的东西,但对于文本光标,在当前聚焦的窗口中。 我不知道如何实现这一目标。 如果有人能指出我正确的方向,我会很高兴。 回答1 因此,在做了一些研究之后,我找到了一种实现方法: 使用xdotool粘贴一些随机字符串使用 OCR 查找随机字符串的坐标使用xdotool删除随机字符串 问题是这种方法很慢(最多 10 秒,具体取决于屏幕上有多少文本)。 我还尝试比较屏幕截图(插入文本之前/之后),它的速度要快得多,但精度要低得多。
  • 我可以在UITextField中选择特定的文本块吗?(Can I select a specific block of text in a UITextField?)
    问题 我的iPhone应用程序中有一个UITextField。 我知道如何使文本字段选择其所有文本,但是如何更改选择呢? 假设我想选择最后5个字符或特定范围的字符,这可能吗? 如果没有,我是否可以移动标记选择的开始和结束的行,就像用户在拖动它们一样? 回答1 使用UITextField,您不能。 但是,如果看到标题,则具有_selectedRange和其他标题(如果向其中添加一些类别,则可能会使用它们;) iOS5及更高版本的更新: 现在,UITextField和UITextView符合UITextInput协议,因此有可能:) 选择插入符号前的最后5个字符将是这样的: // Get current selected range , this example assumes is an insertion point or empty selection UITextRange *selectedRange = [textField selectedTextRange]; // Calculate the new position, - for left and + for right UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:-5]; //
  • How to get the pixel offset from the current caret position in an iframe with contentEditable
    I would like to position a floating div element in an iframe with contentEditable, in case the user enters a certain key combination (for auto-complete purposes). I know how to get the caret position: document.getElementById('elm1_ifr').contentWindow.getSelection().anchorOffset I can use this to calculate the left property of the div, but I can't seem to figure out how to get the top. Another possibility I thought about was using: document.getElementById('elm1_ifr').contentWindow.getSelection().anchorNode.parentNode And using jQuery to get the offset, but if that parent has a long text line, I
  • 在输入 TextField AS3 中获取插入符号位置 (x, y)?(Get caret position (x, y) in input TextField AS3?)
    问题 我需要在我的输入文本字段中获取插入符号的位置。 我不需要设置位置,我需要获取插入符号的当前位置。 无法弄清楚这一点,这让我发疯! 回答1 检查文档中的 Texfield.caretIndex 属性和 TextField.getCharBoundaries() 方法。 这实际上很容易,但是当字段为空或下一个字符为空/换行符时,它会变得棘手。 import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldType; import flash.events.KeyboardEvent; import flash.geom.Rectangle; var t:TextField = new TextField(); t.x = t.y = 20; t.width = 200; t.height = 100; t.multiline = t.wordWrap = t.border = true; t.defaultTextFormat = new TextFormat('_sans',20); t.type = TextFieldType.INPUT; addChild(t); stage.focus = t; t.addEventListener(KeyboardEvent
  • Get X/Y position of caret (input text cursor) under Xorg?
    I'd like to display a popover right above where the user is typing, in any Linux app (GTK, Qt, Electron, etc.), running on X. I figured out creating the popover, now I'm trying to figure out how to get the coordinates of the input text cursor (what blinks while you type, not sure if it's called "caret"?) relative to the screen. I know I can get info on where the mouse with xdotool: xdotool getmouselocation I would need the same thing but for the text cursor, in the currently focused window. I have no idea how to achieve this. I would love if someone could point me in the right direction.
  • 如何阻止光标跳到输入的末尾(How to stop cursor from jumping to the end of input)
    问题 我有一个受控的 React 输入组件,我正在格式化输入,如 onChange 代码中所示。 <input type="TEL" id="applicantCellPhone" onChange={this.formatPhone} name="applicant.cellPhone" value={this.state["applicant.cellPhone"]}/> 然后我的 formatPhone 函数是这样的 formatPhone(changeEvent) { let val = changeEvent.target.value; let r = /(\D+)/g, first3 = "", next3 = "", last4 = ""; val = val.replace(r, ""); if (val.length > 0) { first3 = val.substr(0, 3); next3 = val.substr(3, 3); last4 = val.substr(6, 4); if (val.length > 6) { this.setState({ [changeEvent.target.name]: first3 + "-" + next3 + "-" + last4 }); } else if (val.length > 3) { this
  • Swift中的ChangeCharactersInRange应该如何工作?(How shouldChangeCharactersInRange works in Swift?)
    问题 我正在使用shouldChangeCharactersInRange作为使用即时类型搜索的方式。 但是我有一个问题,在文本字段实际更新之前应该调用shouldChangeCharactersInRange : 在目标C中,我使用以下方法解决了这个问题: -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { NSString * searchStr = [textField.text stringByReplacingCharactersInRange:range withString:string]; return YES; } 但是,我尝试用Swift编写此代码: func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool { let txtAfterUpdate:NSString = self.projectSearchTxtFld.text as NSString
  • 更改UITextField和UITextView光标/插入符号的颜色(Change UITextField and UITextView Cursor / Caret Color)
    问题 我想知道如何在iOS中更改UITextField中的光标/插入符号的颜色(如果答案相同,则返回UITextView的颜色)。 我已经看到了OSX开发的答案,但iOS却没有。 这有可能吗? 回答1 如果您的目标是iOS 7以上版本,则此操作将变得更加容易。 只需使用外观代理使用光标更改字段的tintColor ,它将应用于整个应用程序: Swift 3.0: UITextField.appearance().tintColor = .black 目标C: [[UITextField appearance] setTintColor:[UIColor blackColor]]; 相同的答案适用于单个UITextField : Swift 3.0: myTextField.tintColor = .black 物镜 [myTextField setTintColor:[UIColor blackColor]]; 回答2 使用iOS7,您只需更改textField的tintColor 回答3 斯威夫特3: UITextField.appearance().tintColor = UIColor.black UITextView.appearance().tintColor = UIColor.black 回答4 yourTextField.tintColor = [UIColor
  • 保持 JTextArea 滚动位置(Maintaing JTextArea scroll position)
    问题 我有一个 JTextArea 设置为它的视口的 JScrollPane。 我大约每秒一次连续更新 JTextArea 上显示的(多行)文本。 每次文本更新时,JScrollPane 都会一直移动到文本底部。 相反,我想找出当前显示为原始文本中第一行的行号,并将该行作为文本更新时显示的第一行(或者如果新文本没有那么多行,然后一直滚动到底部)。 我这样做的第一次尝试是获取当前插入符号位置,根据该位置计算行,然后设置文本区域以显示该行: int currentPos = textArea.getCaretPosition(); int currentLine = 0; try { for(int i = 0; i < textArea.getLineCount(); i++) { if((currentPos >= textArea.getLineStartOffset(i)) && (currentPos < gameStateTextArea.getLineEndOffset(i))) { currentLine = i; break; } } } catch(Exception e) { } textArea.setText(text); int newLine = Math.min(currentLine, textArea.getLineCount()); int
  • UITextPosition in UITextField
    Is there any way for me to get at a UITextField's current caret position through the text field's UITextRange object? Is the UITextRange returned by UITextField even of any use? The public interface for UITextPosition does not have any visible members.
  • How to keep track of TextPointer in WPF RichTextBox?
    I'm trying to get my head around the TextPointer class in a WPF RichTextBox. I would like to be able to keep track of them so that I can associate information with areas in the text. I am currently working with a very simple example to try and figure out what is going on. In the PreviewKeyDown event I am storing the caret position and then in the PreviewKeyUp event I am creating a TextRange based on the before and after caret positions. Here is a code sample that illustrates what I am trying to do: // The caret position before typing private TextPointer caretBefore = null; private void rtbTest
  • 获取文本区域中插入符号的偏移位置(以像素为单位)(Get the offset position of the caret in a textarea in pixels [duplicate])
    问题 这个问题已经在这里有了答案: 如何在文本框中获取插入符号的(x,y)像素坐标? (3个答案) 7年前关闭。 在我的项目中,我试图获取插入符号在textarea中的偏移位置(以像素为单位)。 能做到吗? 在这里问之前,我已经遍历了许多链接,尤其是Tim Down的链接,但是我找不到能在IE8 +,Chrome和Firefox中使用的解决方案。 蒂姆·唐(Tim Down)似乎正在为此工作。 我发现的其他一些链接有很多问题,例如找不到插入符位置的顶部偏移。 我试图获取插入符的偏移位置,因为我想展现内部的自动完成建议框textarea通过定位它的基础上插入符的偏移位置。 PS:我无法使用contenteditable div因为我编写了很多与textarea相关的代码。 回答1 这是一种使用rangyinputs,rangy和jQuery的方法。 它基本上将整个文本从文textarea复制到相同大小的div中。 我设置了一些CSS,以确保在每个浏览器中, textarea和div以完全相同的方式包装其内容。 单击textarea ,我读出插入符位于哪个字符索引,然后在div内的相同索引处插入一个插入符span 。 通过这样做,如果用户单击行的开头,插入符号span跳回到上一行,因此我最终遇到了问题。 为了解决这一问题,我检查了前一个字符是否为space (这将允许换行)