iOS中UITextView遇到的问题总结

前言

由于iOS中的UITextField不支持文本换行,所以在有换行需求时,我们只好用UITextView。

以下是在使用UITextView时很容易遇到的一些问题。

问题一:UITextView显示边框

UITextView默认是没有边框颜色的,没有直接的属性来设置边框颜色。

可以使用layer属性来解决,代码如下

    //设置边框宽度
    self.textView.layer.borderWidth = 1.0;
    //设置边框颜色
    self.textView.layer.borderColor = [UIColor grayColor].CGColor;
    //设置圆角
    self.textView.layer.cornerRadius = 5.0;

问题二:UITextView居中了,怎么居上?

iOS中UITextView遇到的问题总结_第1张图片

实际上,UITextView的文本默认就是居上显示的,出现上面的情况很多都是因为在iOS7下使用了navigationController让scrollView自动适应屏幕造成的。(UITextView继承自UIScrollView)。

所以解决方案如以下代码:

	if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) {
		self.automaticallyAdjustsScrollViewInsets = NO;
	}

问题三:UITextView添加placeholder灰色提示文字

UITextView没有UITextField的placeholder属性来提示输入框信息,也没有其他属性或接口来设置。

有人在UITextView上覆盖个UILabel来显示placeholder信息,也是一种解决思路。

但是从写程序的角度来说,用继承UITextView来解决问题似乎更加合理些。

新建UIPlaceholderTextView类继承自UITextView。

代码如下:

UIPlaceholderTextView.h文件

@interface UIPlaceholderTextView : UITextView

@property(nonatomic, strong) NSString *placeholder;  //灰色提示文字

@end

UIPlaceholderTextView.m文件
#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方法里添加如下代码
self.placeHolderTextView.placeholder=@"这一刻你想说什么......";

效果如下:
iOS中UITextView遇到的问题总结_第2张图片



你可能感兴趣的:(placeholder,UITextView,居上)