我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个UITextField是多行(在一般情况下UITextField是单行)。

当我在谷歌搜索时,我找到了一个使用UITextView而不是UITextfield的答案。


当前回答

UITextField是单行的。

你的谷歌搜索是正确的,你需要使用UITextView而不是UITextField来显示和编辑多行文本。

在Interface Builder中,在你想要的地方添加一个UITextView,并选择“可编辑”框。默认情况下是多行。

其他回答

好吧,我用了一些技巧;)首先构建一个UITextField,并像这样增加它的大小:

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

然后在你创建UITextField的同一区域建立一个UITextView,并删除它的背景颜色。现在看起来,你有一个多行TextField !

你可以使用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

如果你必须有一个包含2行文本的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];
'override func viewDidLoad(){
super.viwDidLoad()
YOUR_TEXT_VIEW.textColor = UIColor.gray // YOUR PREFERRED PLACEHOLDER COLOR HERE
YOUR_TEXT_VIEW.text =  "YOUR DEFAULT PLACEHOLDER TEXT HERE"
YOUR_TEXT_VIEW.delegate = self
}'

这个代码块就足够了。请不要忘记在使用以下扩展之前在viewDidLoad或通过storyboard设置委托:

extension YOUR_VIEW_CONTROLLER: UITextViewDelegate {
    
    func textViewDidBeginEditing (_ textView: UITextView) {
        if YOUR_TEXT_VIEW.text.isEmpty || YOUR_TEXT_VIEW.text == "YOUR DEFAULT PLACEHOLDER TEXT HERE" {
            YOUR_TEXT_VIEW.text = nil
            YOUR_TEXT_VIEW.textColor = .red // YOUR PREFERED COLOR HERE
        }
    }
    func textViewDidEndEditing (_ textView: UITextView) {
        if YOUR_TEXT_VIEW.text.isEmpty {
            YOUR_TEXT_VIEW.textColor = UIColor.gray // YOUR PREFERED PLACEHOLDER COLOR HERE
            YOUR_TEXT_VIEW.text =  "YOUR DEFAULT PLACEHOLDER TEXT HERE"
        }
    }   
}

使用UITextView代替UITextField