前言
由于iOS中的UITextField不支持文本换行,所以在有换行需求时,我们只好用UITextView。
以下是在使用UITextView时很容易遇到的一些问题。
问题一:UITextView显示边框
UITextView默认是没有边框颜色的,没有直接的属性来设置边框颜色。
可以使用layer属性来解决,代码如下:
[objc]
view plain
copy
- //设置边框宽度
- self.textView.layer.borderWidth = 1.0;
- //设置边框颜色
- self.textView.layer.borderColor = [UIColor grayColor].CGColor;
- //设置圆角
- self.textView.layer.cornerRadius = 5.0;
问题二:UITextView居中了,怎么居上?
实际上,UITextView的文本默认就是居上显示的,出现上面的情况很多都是因为在iOS7下使用了navigationController让scrollView自动适应屏幕造成的。(UITextView继承自UIScrollView)。
所以解决方案如以下代码:
[objc]
view plain
copy
- if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
问题三:UITextView添加placeholder灰色提示文字
UITextView没有UITextField的placeholder属性来提示输入框信息,也没有其他属性或接口来设置。
有人在UITextView上覆盖个UILabel来显示placeholder信息,也是一种解决思路。
但是从写程序的角度来说,用继承UITextView来解决问题似乎更加合理些。
新建UIPlaceholderTextView类继承自UITextView。
代码如下:
UIPlaceholderTextView.h文件
[objc]
view plain
copy
- @interface UIPlaceholderTextView : UITextView
- @property(nonatomic, strong) NSString *placeholder; //灰色提示文字
- @end
UIPlaceholderTextView.m文件
[objc]
view plain
copy
- #import "UIPlaceholderTextView.h"
- @implementation UIPlaceholderTextView
- - (id)initWithFrame:(CGRect)frame {
- if ((self = [super initWithFrame:frame])) {
- [self awakeFromNib];
- }
- return self;
- }
- - (void)awakeFromNib {
- [self addObserver];
- }
- #pragma mark 注册通知
- - (void)addObserver {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidBeginEditing:) name:UITextViewTextDidBeginEditingNotification object:self];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textDidEndEditing:) name:UITextViewTextDidEndEditingNotification object:self];
- }
- #pragma mark 移除通知
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- #pragma mark 开始编辑
- - (void)textDidBeginEditing:(NSNotification *)notification {
- if ([super.text isEqualToString:_placeholder]) {
- super.text = @"";
- [super setTextColor:[UIColor blackColor]];
- }
- }
- #pragma mark 结束编辑
- - (void)textDidEndEditing:(NSNotification *)notification {
- if (super.text.length == 0) {
- super.text = _placeholder;
- //如果文本框内是原本的提示文字,则显示灰色字体
- [super setTextColor:[UIColor lightGrayColor]];
- }
- }
- #pragma mark 重写setPlaceholder方法
- - (void)setPlaceholder:(NSString *)aPlaceholder {
- _placeholder = aPlaceholder;
- [self textDidEndEditing:nil];
- }
- #pragma mark 重写getText方法
- - (NSString *)text {
- NSString *text = [super text];
- if ([text isEqualToString:_placeholder]) {
- return @"";
- }
- return text;
- }
- @end
在使用UIPlaceholderTextView的控制器的viewDidLoad方法里添加如下代码
[objc]
view plain
copy
- self.placeHolderTextView.placeholder=@"这一刻你想说什么......";
效果如下: