我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个UITextField是多行(在一般情况下UITextField是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView而不是UITextfield的答案。
我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个UITextField是多行(在一般情况下UITextField是单行)。
当我在谷歌搜索时,我找到了一个使用UITextView而不是UITextfield的答案。
当前回答
还有另一个选择对我很有效:
子类UITextField并覆盖:
- (void)drawTextInRect:(CGRect)rect
在这个方法中,你可以例如:
NSDictionary *attributes = @{ NSFontAttributeName : self.font,
NSForegroundColorAttributeName : self.textColor };
[self.text drawInRect:verticalAlignedRect withAttributes:attributes];
如果rect有足够的空间,这段代码将使用所需的行数来呈现文本。您可以根据需要指定任何其他属性。
请勿使用:
self.defaultTextAttributes
这将强制一行文本渲染
其他回答
你可以使用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,并像这样增加它的大小:
CGRect frameRect = textField.frame;
frameRect.size.height = 53;
textField.frame = frameRect;
然后在你创建UITextField的同一区域建立一个UITextView,并删除它的背景颜色。现在看起来,你有一个多行TextField !
使用textView代替,然后遵循它的委托,调用textViewDidChange方法在该方法调用tableView.beginUpdates()和tableview . endpdates(),不要忘记设置rowHeight和estimatedRowHeight为UITableView.automaticDimension。
使用UITextView代替UITextField
UITextField是单行的。
你的谷歌搜索是正确的,你需要使用UITextView而不是UITextField来显示和编辑多行文本。
在Interface Builder中,在你想要的地方添加一个UITextView,并选择“可编辑”框。默认情况下是多行。