大家都知道UITextField才有placeholder属性,UITextView 并没有placeholder,那么怎么模拟UITextfield使UITextView也有placeholder。
思路是:继承uitextview,判断当text为空时就让[super text]显示placeholder。
代码如下(我引用了arc):
UIPlaceholderTextView.h
#import <UIKit/UIKit.h> @interface UIPlaceholderTextView : UITextView @property(nonatomic, strong) NSString *placeholder; //占位符 -(void)addObserver;//添加通知 -(void)removeobserver;//移除通知 @end
UIPlaceholderTextView.m
#import "UIPlaceholderTextView.h" @interface UIPlaceholderTextView () @property (nonatomic, strong) UIColor* textColor; - (void) beginEditing:(NSNotification*) notification; - (void) endEditing:(NSNotification*) notification; @end @implementation UIPlaceholderTextView @synthesize placeholder; @synthesize textColor; - (id) initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { [self awakeFromNib]; } return self; } //当用nib创建时会调用此方法 - (void)awakeFromNib { textColor = [UIColor redColor]; [self addObserver]; } -(void)addObserver { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(beginEditing:) name:UITextViewTextDidBeginEditingNotification object:self]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(endEditing:) name:UITextViewTextDidEndEditingNotification object:self]; } -(void)removeobserver { [[NSNotificationCenter defaultCenter] removeObserver:self]; } #pragma mark - #pragma mark Setter/Getters - (void) setPlaceholder:(NSString *)aPlaceholder { placeholder = aPlaceholder; [self endEditing:nil]; } - (NSString *) text { NSString* text = [super text]; if ([text isEqualToString:placeholder]) return @""; return text; } - (void) beginEditing:(NSNotification*) notification { if ([super.text isEqualToString:placeholder]) { super.text = nil; //字体颜色 [super setTextColor:textColor]; } } - (void) endEditing:(NSNotification*) notification { if ([super.text isEqualToString:@""] || self.text == nil) { super.text = placeholder; //注释颜色 [super setTextColor:[UIColor lightGrayColor]]; } }
在ViewController中用时,1、在xib上加一个uitextview连接上,2、直接创建initframe
但是不要忘了,placeholder,和添加通知,移除通知。
- (void)viewDidLoad { [super viewDidLoad]; self.textView.placeholder = @"请添写你的信息……"; // Do any additional setup after loading the view, typically from a nib. } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:YES]; [self.textView addObserver]; } -(void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:YES]; [self.textView removeobserver]; }
效果图:
欢迎大家,有更好的方法提出!
作者:rhljiayou 发表于2013-7-16 11:17:32 原文链接
阅读:21 评论:0 查看评论