UITextView中的占位符

我的应用程序使用UITextView。现在,我希望UITextView具有一个类似于您可以为UITextField设置的占位符

如何做到这一点

我对bcd的解决方案做了一些小的修改,以允许从Xib文件进行初始化、文本包装,并保持背景色。希望它能为其他人省去麻烦

UIPlaceHolderTextView.h:

#导入<基础/基础h>
IB_可设计
@界面UIPlaceholder文本视图:UITextView
@属性(非原子,保留)i可检测NSString*占位符;
@属性(非原子,保留)i可检测UIColor*占位符颜色;
-(作废)文本更改:(NSNotification*)通知;
@结束

UIPlaceHolderTextView.m:

#导入“UIPlaceHolderTextView.h”
@接口UIPlaceholder TextView()
@属性(非原子,保留)UILabel*占位符标签;
@结束
@文本视图的实现
CGFloat常量UI\u占位符\u文本\u更改\u动画\u持续时间=0.25;
-(无效)解除锁定
{
[[NSNotificationCenter defaultCenter]移除观察者:self];
#如果uu具有u特征(objc_u弧)
#否则
[[u占位符标签发布];[u占位符标签=nil;
[\u占位符颜色释放];\u占位符颜色=零;
[_占位符释放];_占位符=零;
[super dealoc];
#恩迪夫
}
-(无效)从NIB中唤醒
{
[超级awakeFromNib];
//使用Interface Builder用户定义的运行时属性来设置
//接口生成器中的占位符和占位符颜色。
如果(!self.placeholder){
[自我设置占位符:@”“;
}
如果(!self.placeholderColor){
[自设置占位符颜色:[UIColor lightGrayColor]];
}
[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(textChanged:)名称:UITextViewTextDidChangeNotification对象:nil];
}
-(id)initWithFrame:(CGRect)帧
{
if((self=[super initWithFrame:frame]))
{
[自我设置占位符:@”“;
[自设置占位符颜色:[UIColor lightGrayColor]];
[[NSNotificationCenter defaultCenter]添加观察者:自选择器:@selector(textChanged:)名称:UITextViewTextDidChangeNotification对象:nil];
}
回归自我;
}
-(作废)文本更改:(NSNotification*)通知
{
如果([[self占位符]长度]==0)
{
回来
}
[UIView animateWithDuration:UI\u占位符\u文本\u已更改\u动画\u DURATION动画:^{
如果([[self text]长度]==0)
{
[[self-viewWithTag:999]setAlpha:1];
}
其他的
{
[[self-viewWithTag:999]setAlpha:0];
}
}];
}
-(void)setText:(NSString*)文本{
[超级设置文本:文本];
[自我文本更改:无];
}
-(void)drawRect:(CGRect)rect
{
如果([[self占位符]长度]>0)
{
如果(_placeHolderLabel==nil)
{
_placeHolderLabel=[[UILabel alloc]initWithFrame:CGRectMake(8,8,self.bounds.size.width-16,0)];
_Placeholder Label.lineBreakMode=NSLineBreakByWordWrapping;
_占位符label.numberOfLines=0;
_占位符label.font=self.font;
_Placeholder Label.backgroundColor=[UIColor clearColor];
_placeholder label.textColor=self.placeholder颜色;
_Placeholder Label.alpha=0;
_Placeholder Label.tag=999;
[自添加子视图:_占位符标签];
}
_placeholder label.text=self.placeholder;
[_占位符标签大小匹配];
[自发送子视图备份:_占位符标签];
}
如果([[self text]长度]==0&[[self占位符]长度]>0)
{
[[self-viewWithTag:999]setAlpha:1];
}
[超级drawRect:rect];
}
@结束

发表评论