iOS开发使用textView代替textField时,textView的placeholder问题
2015-05-26 16:58
218 查看
iOS开发很多时候我们需要使用textView代替textField,因为textfield不能自动换行,那么textView就面临着placeholder提示文字的问题,其实实现原理就是在textView下面再添加一个用UITextView创建的_placeholderLabel,通过控制这个_placeholderLabel的隐藏与显示来实现UItextField的placeholder的效果。
本文还会讲到在输入的过程中textView如何动态适应内容的高度。以及还会提及到如何获取textView的行数问题。
本文参考自这里
本文还会讲到在输入的过程中textView如何动态适应内容的高度。以及还会提及到如何获取textView的行数问题。
//创建段落样式 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.lineSpacing = 5;// 字体的行间距 NSDictionary *attributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:15], NSParagraphStyleAttributeName:paragraphStyle }; //这个_placeholderLabel是贴在_textView下面的, _placeholderLabel = [[UITextView alloc] initWithFrame:CGRectMake(20, 64, kScreenWidth-40, 100)]; _placeholderLabel.attributedText = [[NSAttributedString alloc] initWithString:@"输入你的内容" attributes:attributes]; [_placeholderLabel setEditable:NO]; [self.view addSubview:_placeholderLabel]; UITextView *_textView = [[UITextView alloc] initWithFrame:CGRectMake(20, 64, kScreenWidth-40, 100)]; _textView.delegate = self; _textView.backgroundColor = [UIColor clearColor];//这个_textView的背景颜色必须是透明的,才能保证看到它下面的_placeholderLabel中的提示文字 _textView.layer.borderColor = [UIColor redColor].CGColor; _textView.layer.borderWidth = 0.5f; [self.view addSubview:_textView]; _textView.attributedText = [[NSAttributedString alloc] initWithString:@"" attributes:attributes]; //实现UITextView的协议方法 #pragma mark - UITextViewDelegate -(void)textViewDidChange:(UITextView *)textView { // textview 改变字体的行间距 NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];//段落样式 paragraphStyle.lineSpacing = 5;// 字体的行间距 NSDictionary *attributes = @{ NSFontAttributeName:[UIFont systemFontOfSize:15], NSParagraphStyleAttributeName:paragraphStyle }; textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes]; //获取textView的行数 // float rows = (textView.contentSize.height - textView.textContainerInset.top - textView.textContainerInset.bottom) / textView.font.lineHeight; //textview的高度和输入的所有内容的高度保持一致(这个看需求) // [textView setHeight:textView.contentSize.height]; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if (![text isEqualToString:@""]/*当不是输入退格键时*/) { _placeholderLabel.hidden = YES; } if ([text isEqualToString:@""] && range.location == 0 && range.length == 1/*输入的第一个字符是退格键*/) { _placeholderLabel.hidden = NO; } return YES; }
本文参考自这里
相关文章推荐
- iOS开发 键盘遮挡输入框(TextView、TextField)问题
- 【iOS开发】设置textView的默认提示文字,也就是textView变相的"placeholder"。
- iOS开发小记:带输入框(TextField)的UIAlertView
- Android开发之Viewpager与TextView结合使用时不能滑动的问题
- iOS开发之UITextView,设置textViewplaceholder
- iOS开发之UITextView,设置textViewplaceholder
- iOS 之textview 的问题汇总(显示边框的问题,文字居中,placeHolder)
- IOS开发:对TextField或TextView添加文字限制
- iOS开发-UI控件:修改textField的placeholder的字体颜色、大小
- iOS开发小技巧--textField成为密码框,view加载完后textField获取焦点
- iOS开发tableView的cell里面有textField,键盘出现的时候,自动上移
- iOS开发-自定义TabBar使用popToRootViewControllerAnimated重叠问题解决
- iOS 7.0限制textView、textField文字长度崩溃问题解决 —— HERO博客
- ios使用 KVC 修改textField的placeholder的字体颜色和大小
- iOS开发小记:iOS富文本框架DTCoreText在UITableView上的使用
- iOS程序开发之使用PlaceholderImageView实现优雅的图片加载效果
- iOS7.0使用语音输入时包含未解析完成的语音时,点击发送清空textview产生crash问题
- 更完美的《iOS中textField、textView判断过滤禁用emoji表情》,解决过滤表情后九宫格输入不了问题
- iOS开发:UIAlertView使用的问题
- iOS开发:修改textfield的placeholder字体和颜色