以编程方式附加字符后在 UITextField 中显示文本的结尾[重复]

Posted

技术标签:

【中文标题】以编程方式附加字符后在 UITextField 中显示文本的结尾[重复]【英文标题】:Display end of text in UITextField after programmatically appending character [duplicate] 【发布时间】:2014-04-08 17:34:50 【问题描述】:

当键盘不在屏幕上时,我以编程方式将文本附加到UITextField(因此该字段中没有输入指示器)。一旦文本填满该字段,它将继续添加文本,但不会滚动到末尾以显示添加的最后一个字符。相反,它会截断文本并在末尾添加一个省略号 (...)。

如何确保以编程方式添加的最后一个字符可见?

当文本字段更宽时,该解决方案需要在横向(和 iPad)中工作,并且用户还需要能够通过屏幕键盘在此字段中输入文本。 [请注意,当键盘打开时它会自动滚动到末尾(文本字段为firstResponder)并且我以编程方式附加一个字符。]

请注意,这个问题之前已经被问过(因此这个问题被标记为重复的原因)但给定的解决方案将不起作用,因为 sizeWithFont:constrainedToSize:lineBreakMode: 已被弃用。即使我使用它,占位符文本在通过清除 (X) 按钮清除字段后也会右对齐。它也不起作用,因为幻数是硬编码的,因此它不适用于不同大小的文本字段。

Ashley 提供的答案很好,但也不起作用(对我而言),因为用户还需要能够通过系统键盘在字段中输入文本。

这是我附加字符的简单代码行:

self.textField.text = [self.textField.text stringByAppendingString:character];

当文本太长而无法放入可见字段时,会出现以下情况:

我想知道UITextView 是否更适合使用,但我想我会遇到同样的情况 - 当它不适合时需要滚动到底部。

感谢您帮助解决这个问题,我相信那些偶然发现这个问题的人也会。

【问题讨论】:

为什么不只显示文本的结尾? 这正是我需要做的。但是怎么做呢? 【参考方案1】:

这些答案应该会有所帮助:UITextField not scrolling horizontally,UITextField functionality with no keyboard

self.pasteboardField.text = [self.pasteboardField.text stringByAppendingString:character];
UITextPosition *end = [self.pasteboardField endOfDocument];
UITextRange *endrange = [self.pasteboardField textRangeFromPosition:end toPosition:end];
[self.pasteboardField setSelectedTextRange:endrange];

UIView *dummyView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
self.pasteboardField.inputView = dummyView;
[self.pasteboardField becomeFirstResponder];

上面会将光标移动到文本字段的末尾而不显示键盘,但会显示光标/插入符号。

self.pasteboardField.tintColor = [UIColor clearColor];

将隐藏光标/插入符号

【讨论】:

我已经看到了,但是由于 sizeWithFont:constrainedToSize:lineBreakMode: 已被弃用,所以它不起作用。即使我使用它,占位符文本也会在清除字段后立即对齐。我还说它必须在横向上工作,并且硬编码一个幻数是不好的,特别是如果我想支持文本字段会更宽的 iPad。所以我问了我自己的问题,希望有一个可行的解决方案。 :) 我自己试一试,编辑了一些额外信息的答案 这太棒了,干得好!但是有一个问题,用户还需要能够通过键盘在其中输入文本。我在文本字段上的 touchUpInside 上添加了一个操作,将 inputView 设置回 nil,然后成为 FirstResponder,但没有触发该方法。我在包含栏按钮项目上尝试了它,但这也不起作用。有什么想法吗? 我最终决定使用上面的代码进行一些小的调整,然后我添加了代码来在隐形键盘和系统键盘之间来回切换以响应用户的操作。它很乱,但它有效。

以上是关于以编程方式附加字符后在 UITextField 中显示文本的结尾[重复]的主要内容,如果未能解决你的问题,请参考以下文章

UITextField 不会以编程方式转换为字符串或采用任何二进制运算符 Xcode

以编程方式创建 UITextField 事件

以编程方式添加带有约束的 UITextField

以编程方式创建的 UITextField 隐藏了其他控件

以编程方式开始在另一个表格视图单元格中编辑 UITextField

有关以编程方式创建UITextField的问题