不推荐使用的方式

但是在用的时候才发现原来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];
}
}

ios给textView提价提示性文字的更多相关文章

  1. Html标签中Alt和Title都是提示性语言标签

    在Html标签中Alt和Title都是提示性语言标签,在我们浏览一些网页时,鼠标停留在一张图片或文字链接上时,在鼠标的右下角出现一个提示信息框,对目标进行一定的注释说明,这就是它们的作用.    其中 ...

  2. 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应

    超文本:http://www.baidu.com 这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可以 ...

  3. Android TextView中有图片有文字混合排列

    Android TextView中有图片有文字混合排列 1.使用html.fromHtml 2.新建ImageGetter 3.使用<img src>标签 demo: 1.设置文字 ((T ...

  4. android - TextView单行显示...或者文字左右滚动(走马灯效果)

    条件 TextView单行显示,文字左右滚动(走马灯效果)实现条件: 实现单行设置固定宽度或者设置权重都行 代码 TextView滚动必须写下面几个属性 android:singleLine=&quo ...

  5. Android TextView(EditView)文字底部或者中间 加横线

    Android TextView(EditView)文字底部或者中间 加横线 tv = (TextView) this .findViewById(R.id. text_view ); 中间加横线 t ...

  6. iOS中求出label中文字的行数和每一行的内容

    今天遇到一个需求,需要计算label中文字的行数.想了好久也没想到好的解决方法,就在网上找了下.结果发现一篇文章是讲这个的.这部分代码不但能够求出一个label中文字行数,更厉害的是能够求出每一行的内 ...

  7. Android开发:文本控件详解——TextView(二)文字跑马灯效果实现

    一.需要使用的属性: 1.android:ellipsize 作用:若文字过长,控制该控件如何显示. 对于同样的文字“Android开发:文本控件详解——TextView(二)文字跑马灯效果实现”,不 ...

  8. AJ学IOS 之微博项目实战(11)发送微博自定义TextView实现带占位文字

    AJ分享,必须精品 一:效果 二:代码: 由于系统自带的UITextField:和UITextView:不能满足我们的需求,所以我们需要自己设计一个. UITextField: 1.文字永远是一行,不 ...

  9. TextView中的部分文字响应点击事件

    TextView是android常用的控件,经常要显示不同文字的大小,颜色,......今天要实现这样这样一个需求,TextView某段内容显示的文字颜色不一样,并且点击区域只能是改变了颜色的字. 1 ...

随机推荐

  1. github本地库及clone常用命令

    新建本地库 1. cd d: 2. mkdir git 3. cd git 4. git init 5. git remote add  origin git@github.com:swportal/ ...

  2. JavaScript Date对象更进一步

    总结分享这个近期开发解决的一个Bug. Javascript的Date对象具有容错性,会自动根据当年的日期根据设置的属性值转换,也就是说Date对象的setDate会影响setMonth,month会 ...

  3. Python subprocess + timeout的命令执行

    Popen对象 poll() 判断是否执行完毕,执行完毕返回0,未执行完毕返回None terminate() 终止进程发送SIGTERM信号 raise 自定义返回错误 import time im ...

  4. echarts x轴或y轴文本字体颜色改变

    1:x轴文本字体颜色改变 xAxis : [ { type : 'category', data : ['<30','30-','40-','50-','60-','>=70'], axi ...

  5. mycat 概述

    从开始接触mycat,到现在为止也有三个多月的时间了,目前在测试环境中已经初步应用!大概可以总结一下了 mycat是一个数据库中间件,也可以理解为是数据库代理.在架构体系中是位于数据库和应用层之间的一 ...

  6. Redis字符串类型相关操作命令

    string是redis最基本的类型,可以包括任何类型数据,如jpg图片或者序列化对象. 单个value最大上限是1G字节 如果只使用string类型,redis就可以被看做具有持久化特性的memca ...

  7. C#读取Excel的其中一种方式OleDb读取(100万条)--快速大量插入SQL中

    主要运用表类型 Create table BulkTestTable( Id nvarchar(), UserName nvarchar(), Pwd nvarchar() ) Go CREATE T ...

  8. Zookeeper实现分布式锁服务(Chubby)

    在分布式系统中,如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰,来保证一致性,在这种情况下,便需要使用到分布式锁例如有N台服务器同时 ...

  9. 强制改变IE中的文本模式

    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

  10. 使用PowerDesigner创建mysql数据库表图

    使用PowerDesigner 建数据库表. 一直很忙,没有时间写东西.这次搞点会声会色的,嘿嘿 此技能为项目经理必备技能. 本次主角: 1.在workspace下建立一项目: physical da ...