ios给textView提价提示性文字
不推荐使用的方式
但是在用的时候才发现原来textView没有类似于textField的那种placeholder功能。所谓placeholder就比如用户看到一个输入框,然后输入框里面一般会有几个浅灰色的文字,告诉用户这个地方是用来写什么内容的,当用户开始输入的时候,这几个文字就自然而然地消失了。这几个文字就是'Placeholder'。
在.m文件中实现textview delegate的两个方法:
注意:不要忘了在textView的位置写上
textView.delegate = self;
(BOOL) textViewShouldBeginEditing:(UITextView *)textView
{ if(textView.tag == 0) { textView.text = @""; textView.textColor = [UIColor blackColor]; textView.tag = 1; } return YES; } - (void)textViewDidChange:(UITextView *)textView { if([textView.text length] == 0) { textView.text = @"Foobar placeholder"; textView.textColor = [UIColor lightGrayColor]; textView.tag = 0; } }
Tip:使用textView的代理需要在头文件中加入: <UITextViewDelegate>
注意:这种方法确实可以实现我们想要的功能,但是有一个很明显的bug:如果用户输入了几个字以后,想全部删除了重新输入内容,那就会发现你永远都没法删除干净,因为当你把最后一个字后,textViewDidChange方法就监测到textView.text的 length = 0了 于是就会自动帮你不上你想要显示的placeholder。。。可以脑补下那个画面,疯狂地删除,却怎么也删不干净。
建议采用以下方法
然后就采用了另外的方法,就是添加一个label,这个label里面写入你想要显示的placeholder,然后还是在textViewDidChange方法里面,如果当前的text长度为0,就把label显示出来,否则的话,就把Label隐藏了。
把我的程序里面和这部分内容相关的摘出来吧:
.h文件
@interface FeedbackViewController : UIViewController<UITextViewDelegate,UIAlertViewDelegate> @propert(strong,nonatomic) IBOutlet UITextView *textView; @end
.m文件
viewDidLoad函数:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. label = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, 200, 20)]; label.enabled = NO; label.text = @"在此输入反馈意见"; label.font = [UIFont systemFontOfSize:15]; label.textColor = [UIColor lightGrayColor]; [self.textView addSubview:label]; }
初始化的时候把label的内容设置一下。注意这个label是添加在textView里面的,我调试了一下 起始位置(3,3)是个还算不错的位置。注意要把label设置成不可点击。
//TextView Delegate
//可以判断是否超出最大限额 如140 (可写这个方法也可不写)
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
if ([text isEqualToString:@""] && range.length > 0) {
//删除字符肯定是安全的
return YES;
} else{
if (textView.text.length - range.length + text.length > 140) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"超出最大可输入长度" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];//如果输入的文字大于140 则提示 <span style="font-family: Arial, Helvetica, sans-serif;">"超出最大可输入长度" 并不能继续输入文字</span>
[alert show];
return NO;
} else {
return YES;
}
}
}
- (void) textViewDidChange:(UITextView *)textView{ if ([textView.text length] == 0) { [label setHidden:NO]; }else{ [label setHidden:YES]; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?