如何创建多行UITextfield?

raa*_*aaz 251 uitextfield uitextview ios

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

当我在Google上搜索时,我找到了一个使用UITextView而不是UITextfield为此目的的答案.

h4x*_*xxr 424

UITextField 特别是只有一行.

您的Google搜索是正确的,您需要使用UITextView而不是UITextField显示和编辑多行文字.

在Interface Builder中,添加所需的UITextView位置,然后选择"可编辑"框.默认情况下它将是多行的.

  • 那么请告诉我原生日历应用程序如何在事件添加屏幕中使用占位符和自动换行功能查看视图? (7认同)
  • 您不能将占位符添加到TextView,但可以在TextView上添加灰色标签,并在用户输入一些文本时隐藏它. (4认同)
  • 如何为UITextView设置占位符? (3认同)

Rud*_*udi 19

好吧,我做了一些技巧;)首先构建一个UITextField并增加它是size这样的:

CGRect frameRect = textField.frame;
        frameRect.size.height = 53;
        textField.frame = frameRect;
Run Code Online (Sandbox Code Playgroud)

然后建立一个UITextView完全在你制作我的同一区域UITextField,并删除它background color.现在看起来你有多条线TextField!

  • 这会创建一个`UITextView`.拥有UITextField的意义在于它的行为与`UITextView`不同. (7认同)
  • 我使用自动布局并将UITextField的所有边固定到UITextView.非常好的技巧,谢谢! (2认同)
  • `UITextView`和`UITextfield`之间存在许多差异:它们继承自`UIScrollView` vs`UIControl`,默认情况下不可编辑,默认情况下可编辑,多行与单行,不同委托协议,无占位符与占位符. (2认同)

Dav*_*e G 14

您可以使用UITextView伪造UITextField.您将遇到的问题是您丢失了占位符功能.

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

在viewDidLoad中,将颜色和文本设置为占位符:

myTxtView.textColor = .lightGray
myTxtView.text = "Type your thoughts here..."
Run Code Online (Sandbox Code Playgroud)

然后在选择UITextView时使占位符消失:

func textViewDidBeginEditing (textView: UITextView) {
    if myTxtView.textColor.textColor == ph_TextColor && myTxtView.isFirstResponder() {
        myTxtView.text = nil
        myTxtView.textColor = .white
    }
}
Run Code Online (Sandbox Code Playgroud)

用户完成编辑后,确保有值.如果没有,请再次添加占位符:

func textViewDidEndEditing (textView: UITextView) {
    if myTxtView.text.isEmpty || myTxtView.text == "" {
        myTxtView.textColor = .lightGray
        myTxtView.text = "Type your thoughts here..."
    }
}
Run Code Online (Sandbox Code Playgroud)

您可能需要伪造的其他功能:

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

myTxtView.autocapitalizationType = .words
Run Code Online (Sandbox Code Playgroud)

UITextField通常不会滚动:

myTxtView.scrollEnabled = false
Run Code Online (Sandbox Code Playgroud)


Mon*_*art 7

除了多行行为之外,UITextView和UITextField之间的主要区别在于UITextView没有提出占位符.要绕过此限制,您可以将UITextView与"假占位符"一起使用.

有关详细信息,请参阅此SO问题:UITextView中的占位符.