我正在开发一个用户必须写一些信息的应用程序。为此,我需要一个UITextField
多行(通常UITextField
是单行)。
在我进行谷歌搜索时,我找到了使用UITextView
而不是UITextfield
为此目的的答案。
我正在开发一个用户必须写一些信息的应用程序。为此,我需要一个UITextField
多行(通常UITextField
是单行)。
在我进行谷歌搜索时,我找到了使用UITextView
而不是UITextfield
为此目的的答案。
Answers:
UITextField
特别是仅一行。
您的Google搜索是正确的,您需要使用UITextView
而不是UITextField
显示和编辑多行文本。
在Interface Builder中,在所需UITextView
位置添加一个,然后选择“可编辑”框。默认情况下它将是多行。
您可以使用UITextView伪造UITextField。您将遇到的问题是您丢失了占位符功能。
如果选择使用UITextView并需要占位符,请执行以下操作:
在viewDidLoad中,将颜色和文本设置为占位符:
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
然后,当您选择UITextView时,使占位符消失:
func textViewDidBeginEditing (textView: UITextView) {
if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
myTxtView.text = nil
myTxtView.textColor = .white
}
}
用户完成编辑后,请确保有一个值。如果没有,请再次添加占位符:
func textViewDidEndEditing (textView: UITextView) {
if myTxtView.text.isEmpty || myTxtView.text == "" {
myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
}
}
您可能需要伪造的其他功能:
UITextField通常使用大写字母,您可以将该功能添加到UITableView中:
myTxtView.autocapitalizationType = .words
UITextField通常不滚动:
myTxtView.scrollEnabled = false
好吧,我做了一些技巧;)首先构建一个UITextField
并增加它,size
就像这样:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
然后UITextView
在与您制作我的作品相同的区域中建立一个UITextField
,并删除其内容background color
。现在看来,您有多行TextField
!
UITextView
。拥有UITextField的意义在于它的行为不同于UITextView
。
UITextView
和之间有很多区别UITextfield
:它们继承自UIScrollView
vs UIControl
,默认情况下不可编辑vs.默认情况下可编辑,多行与单行,不同的委托协议,无占位符与占位符。
UITextView
用于文本段落。如果需要一段文字,请使用它,否则不需要。
除了多行行为之外,UITextView和UITextField之间的主要区别在于UITextView不建议使用占位符。要绕过此限制,可以将UITextView与“假占位符”一起使用。
有关详细信息,请参见此SO问题:UITextView中的占位符。
如果必须具有包含两行文本的UITextField,则一个选项是添加一个UILabel作为第二行文本的UITextField的子视图。我的应用程序中有一个UITextField,用户经常不知道可以通过点击来编辑它,我想在UITextField中添加一些小字幕文本,例如“点击以编辑”。
CGFloat tapLlblHeight = 10;
UILabel *tapEditLbl = [[UILabel alloc] initWithFrame:CGRectMake(20, textField.frame.size.height - tapLlblHeight - 2, 70, tapLlblHeight)];
tapEditLbl.backgroundColor = [UIColor clearColor];
tapEditLbl.textColor = [UIColor whiteColor];
tapEditLbl.text = @"Tap to Edit";
[textField addSubview:tapEditLbl];
是的,您正在寻找UITextView。您必须以不同的方式处理某些事情(例如回车键),但是您可以向其中添加文本,并且如果其中包含过多的文本,它将允许您上下滚动。
此链接包含有关制作屏幕以输入数据的信息:
使用UITextView代替UITextField
作为上述h4xxr答案的补充,一种更简单的调整UITextField高度的方法是在属性检查器->文本字段中选择方形边框样式。(默认情况下,UITextfield的边框样式为椭圆。)
参考:Brian在这里回答:如何设置UITextField的高度?
还有一个对我有用的选择:
子类化UITextField并覆盖:
- (void)drawTextInRect:(CGRect)rect
在这种方法中,您可以例如:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
如果rect有足够的空间,则此代码将根据需要使用多行显示文本。您可以根据需要指定其他任何属性。
不使用:
self.defaultTextAttributes
这将强制渲染一行文本