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

时间:2016-09-01 11:18:42

标签: ios swift uitextfield uitextview multiline

我需要向用户显示多行文字输入" box"高度大于def handle_connection(): # initialize stuff ... while True: # stuff to get the request ... # stuff to handle the request ... 的标准高度。什么是最好或最正确的方法?:

  1. 使用String parkAdd = getString(R.string.stg_ParkAddress_+id);并在代码中更改其高度或应用某个高度限制。
  2. 使用可编辑的String parkAdd = getString(R.string.stg_ParkAddress_1); parkAdd = parkAdd.replace("1",id); if (!parkAdd.equalsIgnoreCase("")){ tvParkAddress.setText(parkAdd); } 。这是多行的,但默认情况下它没有占位符,我想我应该在代码中实现该功能。

5 个答案:

答案 0 :(得分:71)

UITextField仅限一行。

使用UITextView代替多行文字。

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

首先将UITextView设置为包含占位符文本,并将其设置为浅灰色,以模仿UITextField的占位符文本的外观。可以在viewDidLoad中或在文本视图的创建中执行此操作。

对于Swift

textView.text = "Placeholder"
textView.textColor = UIColor.lightGrayColor()

对于Objective-C

textView.text = @"Placeholder";
textView.textColor =[UIColor lightGrayColor];

然后,当用户开始编辑文本视图时,如果文本视图包含占位符(即,如果其文本颜色为浅灰色),请清除占位符文本并将文本颜色设置为黑色以容纳用户&#39进入。

对于Swift

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

对于Objective-C

- (BOOL) textViewShouldBeginEditing:(UITextView *)textView
{
    if (textView.textColor == [UIColor lightGrayColor]) {
        textView.text = @"";
        textView.textColor = [UIColor blackColor];
    }

    return YES;
} 

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

对于Swift

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

对于Objective-C

- (void)textViewDidEndEditing:(UITextView *)textView{
    if ([textView.text isEqualToString:@""]) {
        textView.text = @"Placeholder";
        textView.textColor =[UIColor lightGrayColor];
    }
}

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

答案 1 :(得分:9)

使用选项2,textField的高度无法更改,并且不显示第二行......

PLACEHOLDER LOGIC:

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

答案 2 :(得分:3)

适用于Swift 3

UITextView本身并不具有占位符属性,因此您必须使用UITextViewDelegate方法以编程方式创建和操作其中一个。

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

首先将UITextView设置为包含占位符文本,并将其设置为浅灰色,以模仿UITextField占位符文本的外观。可以在viewDidLoad中或在文本视图的创建中执行此操作。

textView.text = "Placeholder"
textView.textColor = UIColor.lightGray

然后,当用户开始编辑文本视图时,如果文本视图包含占位符(即,如果其文本颜色为浅灰色),请清除占位符文本并将文本颜色设置为黑色以容纳用户&#39进入。

func textViewDidBeginEditing(_ textView: UITextView) {
    if textView.textColor == UIColor.lightGray {
        textView.text = nil
        textView.textColor = UIColor.black
    }
}

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

func textViewDidEndEditing(_ textView: UITextView) {
    if textView.text.isEmpty {
        textView.text = "Placeholder"
        textView.textColor = UIColor.lightGray
    }
}

答案 3 :(得分:2)

您无法使用UITextField执行多行文字,您应该使用UITextView并实施占位符逻辑。

答案 4 :(得分:2)

我肯定会选择UITextView。如果您想设置占位符文本,UITextView+Placeholder可以轻松设置它。您可以使用

安装它
pod 'UITextView+Placeholder', '~> 1.2'
在您的pod文件中

。 现在您可以导入标题

#import <UITextView+Placeholder/UITextView+Placeholder.h>

有助于轻松设置占位符。

UITextView *textView = [[UITextView alloc] init];
textView.placeholder = @"How are you?";
textView.placeholderColor = [UIColor lightGrayColor]; // optional
textView.attributedPlaceholder = ... // NSAttributedString (optional)