我正在努力实现可能或不可能的事情,但如果确实如此,我还没有找到办法。
我有一个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;
}
我想要实现的目标是可能的吗?如果是这样,我将如何去做呢?
答案 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];