在UITextView中将预加载文本设置为黑色并在文本中键入白色

时间:2014-04-09 10:57:43

标签: ios uitextview uicolor

我正在努力实现可能或不可能的事情,但如果确实如此,我还没有找到办法。

我有一个UITextView,用占位符的形式填充了“附加注释:”(因为你不能直接使用UITextView的占位符文本)。

当我点击UITextView时,它会创建一个新的行字符,用户可以开始输入。

我想要实现的是“附加注释:”文本为灰色,但输入的文本为白色。

这可能吗?

在我看来,我有:

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {

    if([[textView text] isEqualToString:@"Additional Notes: "]){
        [textView setText:@"Additional Notes: \n"];
    }
    return YES;

}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {

    if([[[textView text] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] isEqualToString:@""]){
        [textView setText:@"Additional Notes: "];
    }
    return YES;
}

viewDidLoad中,我将文字设置为格雷:

self.notesTextView.textColor = [UIColor grayColor]; 

shouldChangeTextInRage中,我尝试使用if条件将颜色设置为白色,但发生的情况是,“附加注释:”变为白色以及我开始输入时。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    self.notesTextView.textColor = [UIColor whiteColor];
    if ([text isEqualToString:@"\n"])
    {
        [textView resignFirstResponder];
        return NO;
    }
    return YES;
}

我想要实现的目标是可能的吗?如果是这样,我将如何去做呢?

1 个答案:

答案 0 :(得分:1)

您需要使用

找到@“附加说明:”子字符串的范围
NSRange *rangeOfPlaceholder =[[textView text] rangeOfString:@"Additional Notes: "];

然后创建attributestext并在编辑时在textview委托中将其设置为textView: -

NSMutableAttributedString *attString=[[NSMutableAttributedString alloc] initWithString:textView.text];
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor grayColor] range:rangeOfPlaceholder];
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:rangeOfRemainingEnteredText];

[textView setAttributedText:attString];