如何创建多行UITextfield?

2020/10/31 23:11 · ios ·  · 0评论

我正在开发一个应用程序,用户必须在其中编写一些信息。为此,我需要一个UITextField多行(通常UITextField是单行)。

在我进行谷歌搜索时,我找到了使用UITextView而不是UITextfield为此目的的答案

UITextField 特别是仅一行。

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

在Interface Builder中,在所需UITextView位置添加一个,然后选择“可编辑”框。默认情况下将为多行。

您可以使用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并增加它,size就像这样:

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

然后UITextView在与您创建我的区域完全相同的区域中构建一个UITextField,并删除其区域background color现在看来,您有多行TextField

除了多行行为外,UITextView和UITextField之间的主要区别在于UITextView不建议使用占位符。要绕过此限制,可以将UITextView与“假占位符”一起使用。

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

如果必须具有包含两行文本的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。您必须以不同的方式处理某些事情(例如回车键),但是您可以向其中添加文本,并且如果其中包含过多的文本,它将允许您上下滚动。

此链接包含有关制作屏幕以输入数据的信息:

创建数据输入屏幕

使用UITextView代替UITextField

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

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

还有一个对我有用的选择:

子类化UITextField并覆盖:

- (void)drawTextInRect:(CGRect)rect

在这种方法中,您可以例如:

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

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

如果rect有足够的空间,此代码将根据需要使用多行显示文本。您可以根据需要指定其他任何属性。

不使用:

self.defaultTextAttributes

这将强制一行文本渲染

本文地址:http://ios.askforanswer.com/ruhechuangjianduoxinguitextfield.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!