前言
由于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居中了,怎么居上?
实际上,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=@"这一刻你想说什么......";