我正在开发一个应用程序,用户必须写一些信息。为此,我需要一个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

这将强制一行文本渲染

其他回答

还有另一个选择对我很有效:

子类UITextField并覆盖:

- (void)drawTextInRect:(CGRect)rect

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

    NSDictionary *attributes = @{ NSFontAttributeName : self.font,
                                  NSForegroundColorAttributeName : self.textColor };

    [self.text drawInRect:verticalAlignedRect withAttributes:attributes];

如果rect有足够的空间,这段代码将使用所需的行数来呈现文本。您可以根据需要指定任何其他属性。

请勿使用:

self.defaultTextAttributes

这将强制一行文本渲染

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

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

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

是的,UITextView就是你要找的。你将不得不处理一些不同的东西(如返回键),但你可以添加文本,它将允许你上下滚动,如果里面有太多的文本。

这个链接有关于制作一个屏幕来输入数据的信息:

创建一个数据输入屏幕

作为上面h4xxr回答的补充,调整UITextField高度的一个更简单的方法是在属性检查器->文本字段中选择方形边框样式。(默认情况下,UITextfield的边框样式是椭圆。)

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

'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"
        }
    }   
}