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

时间:2014-04-08 17:34:50

标签: ios objective-c uitextfield truncate ellipse

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

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

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

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

Ashley提供的答案很好,但也不适用(对我来说),因为用户还需要能够通过系统键盘输入文本。

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

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

这是当文本太长而无法放入可见字段时发生的情况:

enter image description here

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

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

1 个答案:

答案 0 :(得分:1)

这些答案应该有所帮助:UITextField not scrolling horizontallyUITextField 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];

将隐藏光标/插入符号