首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS中的多行用户输入: UITextField与UITextView

iOS中的多行用户输入: UITextField与UITextView
EN

Stack Overflow用户
提问于 2016-09-01 11:18:41
回答 5查看 67.6K关注 0票数 47

我需要向用户显示一个多行文本输入“框”,其高度大于UITextField的标准高度。什么是最好的或最正确的方法?

  1. 使用UITextField并在代码中更改其高度或应用特定的高度约束。
  2. 使用可编辑的UITextView。这是多行的,但默认情况下它没有占位符,我想我应该在代码中实现这个特性。
EN

回答 5

Stack Overflow用户

发布于 2016-09-01 11:45:11

UITextField是专门的一行。

对多行文本使用UITextView代替。

要在UITextView中实现占位符,请使用此逻辑/代码。

首先,将UITextView设置为包含占位符文本,并将其设置为浅灰颜色,以模仿UITextField的占位符文本的外观。要么在viewDidLoad中这样做,要么在文本视图的创建上这样做。

For Swift

代码语言:javascript
运行
复制
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()

For Objective C

代码语言:javascript
运行
复制
textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];

然后,当用户开始编辑文本视图时,如果文本视图包含占位符(如果其文本颜色为淡灰色),则清除占位符文本,并将文本颜色设置为黑色,以适应用户的输入。

For Swift

代码语言:javascript
运行
复制
func textViewDidBeginEditing(textView: UITextView) {
    if textView.textColor == UIColor.lightGrayColor() {
        textView.text = nil
        textView.textColor = UIColor.blackColor()
    }
}

For Objective C

代码语言:javascript
运行
复制
- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
    if (textView.textColor == [UIColor lightGrayColor]) {
        textView.text = @"";
        textView.textColor = [UIColor blackColor];
    }

    return YES;
} 

然后,当用户完成编辑文本视图,并将其作为第一个响应者时,如果文本视图为空,则通过重新添加占位符文本并将其颜色设置为淡灰色来重置其占位符。

For Swift

代码语言:javascript
运行
复制
func textViewDidEndEditing(textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGrayColor()
    }
}

For Objective C

代码语言:javascript
运行
复制
- (void)textViewDidEndEditing:(UITextView *)textView{
    if ([textView.text isEqualToString:@""]) {
        textView.text = @"Placeholder";
        textView.textColor =[UIColor lightGrayColor];
    }
}

也要在视图控制器中添加UITextViewDelegate

票数 95
EN

Stack Overflow用户

发布于 2016-09-01 11:58:47

选择二,textField的高度不能改变,它不显示第二行.

占位符逻辑:

代码语言:javascript
运行
复制
textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()

func textViewDidBeginEditing(textView: UITextView) {
    if textView.textColor == UIColor.lightGrayColor() {
        textView.text = nil
        textView.textColor = UIColor.blackColor()
    }
}
func textViewDidEndEditing(textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGrayColor()
    }
}

来自Text View Placeholder Swift

票数 12
EN

Stack Overflow用户

发布于 2017-06-29 16:53:46

Swift 3 3

UITextView本身没有占位符属性,因此您必须使用UITextViewDelegate方法以编程方式创建和操作占位符属性。

(注意:将UITextViewDelegate添加到类中并设置textView.delegate = self。)

首先,将UITextView设置为包含占位符文本,并将其设置为淡灰色,以模仿UITextField占位符文本的外观。要么在viewDidLoad中这样做,要么在文本视图的创建上这样做。

代码语言:javascript
运行
复制
textView.text = "Placeholder"
textView.textColor = UIColor.lightGray

然后,当用户开始编辑文本视图时,如果文本视图包含占位符(如果其文本颜色为淡灰色),则清除占位符文本,并将文本颜色设置为黑色,以适应用户的输入。

代码语言:javascript
运行
复制
func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == UIColor.lightGray {
        textView.text = nil
        textView.textColor = UIColor.black
    }
}

然后,当用户完成编辑文本视图,并将其作为第一个响应者时,如果文本视图为空,则通过重新添加占位符文本并将其颜色设置为淡灰色来重置其占位符。

代码语言:javascript
运行
复制
func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGray
    }
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39270123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档