由于iOS中的UITextField不支持文本换行,所以在有换行需求时,我们只好用UITextView。
以下是在使用UITextView时很容易遇到的一些问题。
UITextView默认是没有边框颜色的,没有直接的属性来设置边框颜色。
可以使用layer属性来解决,代码如下:
//设置边框宽度 self.textView.layer.borderWidth = 1.0; //设置边框颜色 self.textView.layer.borderColor = [UIColor grayColor].CGColor; //设置圆角 self.textView.layer.cornerRadius = 5.0;
实际上,UITextView的文本默认就是居上显示的,出现上面的情况很多都是因为在iOS7下使用了navigationController让scrollView自动适应屏幕造成的。(UITextView继承自UIScrollView)。
所以解决方案如以下代码:
if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)]) { self.automaticallyAdjustsScrollViewInsets = NO; }
UITextView没有UITextField的placeholder属性来提示输入框信息,也没有其他属性或接口来设置。
有人在UITextView上覆盖个UILabel来显示placeholder信息,也是一种解决思路。
但是从写程序的角度来说,用继承UITextView来解决问题似乎更加合理些。
新建UIPlaceholderTextView类继承自UITextView。
代码如下:
UIPlaceholderTextView.h文件
@interface UIPlaceholderTextView : UITextView @property(nonatomic, strong) NSString *placeholder; //灰色提示文字 @end
#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
self.placeHolderTextView.placeholder=@"这一刻你想说什么......";