如何创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
这将强制一行文本渲染