如何创build一个多行UITextfield?

我正在开发一个应用程序,用户必须写一些信息。 为此,我需要一个UITextField ,它是多行的(通常UITextField是一行)。

由于我是谷歌search,我find了一个使用UITextView而不是UITextfield的答案。

UITextField只是一行。

您的Googlesearch是正确的,您需要使用UITextView而不是UITextField来显示和编辑多行文字。

在Interface Builder中,将UITextView添加到所需的位置,然后select“可编辑”框。 这将默认为多行。

好吧,我做了一些窍门;)首先build立一个UITextField并增加它的size是这样的:

 CGRect frameRect = textField.frame; frameRect.size.height = 53; textField.frame = frameRect; 

然后build立一个UITextView完全在你做我的UITextField相同的区域,并删除它的background color 。 现在看起来你有一个多行的TextField

除了多线行为之外,UITextView和UITextField之间的主要区别在于UITextView不提供占位符。 为了绕过这个限制,你可以使用带有“假占位符”的UITextView。

看到这个问题的细节: 占位符在UITextView 。

你可以使用UITextView伪造一个UITextField。 您将遇到的问题是您失去了占位符function。

如果您select使用UITextField并需要占位符,请执行以下操作:

在你的viewDidLoad中设置颜色和文字占位符:

 myTxtView.textColor = UIColor.LightGrayColor() myTxtView.text = "Type your thoughts here..." 

然后当你的UITextView被选中时,让占位符消失:

 func textViewDidBeginEditing (textView: UITextView) { if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() { myTxtView.text = nil myTxtView.textColor = UIColor.whiteColor() } } 

当用户完成编辑时,确保有一个值。 如果没有,再次添加占位符:

 func textViewDidEndEditing (textView: UITextView) { if myTxtView.text.isEmpty || myTxtView.text == "" { myTxtView.textColor = UIColor.LightGrayColor() myTxtView.text = "Type your thoughts here..." } } 

其他function,你可能需要伪造:

UITextField经常大写每个字母,您可以将该function添加到UITableView:

 myTxtView.autocapitalizationType = .Words 

UITextField通常不滚动:

 myTxtView.scrollEnabled = false 

是的,一个UITextView是你在找什么。 你将不得不处理一些不同的事情(比如返回键),但是你可以给它添加文本,如果里面的文本太多,它将允许你上下滚动。

这个链接有关于使屏幕input数据的信息:

创build一个数据input屏幕

如果您必须具有包含两行文本的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而不是UITextField

上面的h4xxr答案的一个补充,调整UITextField高度的一个简单方法是在属性inspectors-> Text Field中select方形边框样式。 (默认情况下,UITextfield的边框样式是椭圆形。)

参考:在这里回答Brian: 如何设置UITextField的高度?

还有另一个选项适用于我:

子类UITextField并覆盖:

 - (void)drawTextInRect:(CGRect)rect 

在这个方法中你可以例如:

  NSDictionary *attributes = @{ NSFontAttributeName : self.font, NSForegroundColorAttributeName : self.textColor }; [self.text drawInRect:verticalAlignedRect withAttributes:attributes]; 

如果矩形具有足够的空间,则此代码将使用尽可能多的行来呈现文本。 您可以根据您的需要指定任何其他属性。

不使用:

 self.defaultTextAttributes 

这将强制一行文本渲染