一、前言
其实这个以前我已经实现过了,不过是用继承的方式来实现的,最近发现UITextView有一个私有的API是 _placeholderLabel,然后今天就实现了,相对继承来说,实现起来相对简单很多,比如说
- 不需要自己监听输入状态来隐藏水印
- 水印位置也不需要自己去设置,系统设置已经设置好了
二、API设置,继承相对分类来说,多一个回调,当结束编辑的时候执行回调并传递当前输入的text出去
添加
Placeholder
,传入字符串即可
/**
* @author Clarence
*
* 水印
*/
@property (nonatomic,copy)NSString *fl_placeholder;
设置
Placeholder
的字体
/**
* @author Clarence
*
* 水印字体,默认systemFontSize
*/
@property (nonatomic,strong)UIFont *fl_placeholderFont;
设置
Placeholder
的颜色
/**
* @author Clarence
*
* 水印颜色,默认lightGrayColor
*/
@property (nonatomic,strong)UIColor *fl_placeholderColor;
@end
三、注意点
- 1、使用textView的时候,如果有导航栏或者tabBar的时候,SB或XIB拖出来的textView光标会显示在中间,可以设置
automaticallyAdjustsScrollViewInsets
根据按所在界面的status bar,navigationbar,与tabbar的高度,自动调整scrollview的 inset,设置为no,不让viewController调整
2、水印label的字体必须要设置,不然水印label会向上偏移,一般来说,水印字体和textView的字体一致,但问题是,如果不设置textView的字体,系统默认返回一个nil,此处如果没有设置,默认给textView一个字体
-
3、系统默认text是空字符串,如果有输入内容,就隐藏水印,不再显示,防止输入后再赋值新的水印后显示出来
四、总结
继承和分类使用起来都差不多,只是换种方式实现,继承实现起来相对分类来说麻烦点,个人还是比较喜欢分类,不过继承实现的话,容易拓展以及自定义,如果只是需要不高,分类能实现就用分类
因为分类使用了系统的私有API,所以上线的时候可能运气不好被拒