不推荐使用的方式

但是在用的时候才发现原来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. 安装器---Inno Setup

    Inno Setup[1]  用Delphi写成,其官方网站同时也提供源程序免费下载.它虽不能与Installshield这类恐龙级的安装制作软件相比,但也当之无愧算是后起之秀.Inno Setup是 ...

  2. diff命令

    描述 在最简单的情况是, diff 比较两个文件的内容 (源文件 和 目标文件). 文件名可以是 - 由标准输入设备读入的文本. 作为特别的情况是, diff - - 比较一份标准输入的它自己的拷贝如 ...

  3. HDU 5130 Signal Interference(计算几何 + 模板)

    HDU 5130 Signal Interference(计算几何 + 模板) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5130 Descripti ...

  4. sql中判断是否存在某个对象

    If object_id(N'对象名',N'对象类型') is not null   例如:表是否存在 if object_id(N'tablename',N'U') is not null begi ...

  5. 属性动画(Property Animation)

    属性动画系统是一个强大的可以绘制任意事物.你可以定义改变物体属性的动画,不管它是不是在屏幕上.属性动画随着时间的推移去改变物体的属性.如果要让某个事物动起来,你只需指定该事物的某个属性,如物体的坐标. ...

  6. box2d 计算自由落体下一帧的位置

    var dt:Number=1/30; var y0:Number=_body.GetPosition().y; var y:Number=y0+_body.GetLinearVelocity().y ...

  7. 修改VirtualBox虚拟机默认存储路径及虚拟机迁移方法

    修改默认安装路径 在安装完虚拟机以后发现我的虚拟的磁盘文件是放在C盘的,就想着有没有办法修改默认存储路径.后来发现确实可以修改,修改虚拟机方法如下:"管理"--->" ...

  8. CascadeType

    当Hibernate配置了(JPA注解) cascade = { CascadeType.PERSIST, CascadeType.MERGE } 调用保存时 session.save(user); ...

  9. POJ 1323 Game Prediction#贪心

    (- ̄▽ ̄)-* //既然是求最少能胜几次 //说明对方是要尽可能让我输 //但为了避免浪费,对方会用比我的牌大的牌中的最小pip的牌来击败我 #include<iostream> #in ...

  10. MongoDB索引(一)

    原文地址 一.介绍 我们已经很清楚索引会提高查询效率.如果没有索引,MongoDB必须对全部集合进行扫描,即,扫描集合中每条文档以选择那些符合查询条件的文档.对查询来说如果存在合适的索引,则Mongo ...