您的位置:首页 > 产品设计 > UI/UE

关于iOS UITextView的一点使用心得,设置placeHolder效果

2015-11-12 17:36 771 查看
前言:最近做了一个论坛发帖的功能,由于文字的输入较多,所以我选择了UITextView。大家都知道现在testView没有textField那样的提示(place Holder)功能,可是产品就要那个效果,所以憋出了这篇博客---- 给textView添加placeHolder效果

基本思路:在textView的第一行添加一个label,用label来提示起到place Holder的效果,当textview里面有文字的时候,让textview覆盖在label上面(背景色为白色),当textView里面的文字为空的时候,把textview的背景色透明,漏出label的文字。这里面用到了textView的代理方法

- (void)textViewDidChange:(UITextView *)textView;
当然了我们为了控制用户输入的不全是空格还可以用textview的其他代理:

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;
- (void)textViewDidEndEditing:(UITextView)textView;
不啰嗦,上代码⬇️⬇️

1、先初始化textView

//初始化
-(void)setTextView
{
//设置placeHolder
UILabel *placeHolderLabel=[[UILabel alloc]initWithFrame:CGRectMake(18, 250, 100, 30)];
placeHolderLabel.text=@"标题(必填)";
placeHolderLabel.font=[UIFont systemFontOfSize:15];
placeHolderLabel.textAlignment=NSTextAlignmentLeft;
placeHolderLabel.textColor=[UIColor colorWithRed:136.0/255 green:136.0/255 blue:136.0/255 alpha:1];
[self.view addSubview:placeHolderLabel];

//设置textView
CGRect titleFrame=CGRectMake(15, 250, 345, 200);
UITextView *titleView=[[UITextView alloc]init];
titleView.frame=titleFrame;
titleView.font=[UIFont systemFontOfSize:15];
titleView.textColor=[UIColor blackColor];
titleView.backgroundColor=[UIColor clearColor];//默认颜色 透明,直接显示提示内容
titleView.returnKeyType=UIReturnKeyDone;
titleView.delegate=self;//记得声明代理
[self.view addSubview:titleView];
}
2、实现代理方法

//显示提示的placeHolder,如果输入的全是空格
- (void)textViewDidEndEditing:(UITextView *)textView;
{//关于字符串的拼接删除方法都在NSString类里面,大家自行查阅
NSString *stringWithoutSpace;
stringWithoutSpace=[textView.text stringByReplacingOccurrencesOfString:@" " withString:@""];
if (stringWithoutSpace.length==0) {
textView.text=@"";
textView.backgroundColor=[UIColor clearColor];
}
}
//字数限制
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;{
if ([text isEqualToString:@"\n"]) {//按下return键
//这里隐藏键盘,不做任何处理
[textView resignFirstResponder];
return NO;
}
NSString *toBeString = textView.text;
UITextRange *selectedRange = [textView markedTextRange];
//获取高亮部分
UITextPosition *position = [textView positionFromPosition:selectedRange.start offset:0];
// 没有高亮选择的字,则对已输入的文字进行字数统计和限制
if (!position)
{
if (toBeString.length >= 200 && ![text isEqualToString:@""]&&textView.tag==201510233) {
return NO;
}
}

return YES;
}
//实时监控输入框的内容
- (void)textViewDidChange:(UITextView *)textView;
{
//显示隐藏placeholder
if(textView.text.length>0)
{
textView.backgroundColor=[UIColor whiteColor];
}
if (textView.text.length==0)
{
textView.backgroundColor=[UIColor clearColor];
}

}


基本上这样我们就可以实现想要的效果了,当然了可能还有别的更简单的方法来实现。

以上仅代表我个人的想法,望大家多多指正,好方法可共享,新手文档,高手勿喷!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: