UITextView是我们常用的控件,而且很多时候都要为textView设置占位文字,但textView并没有placeholder这个属性,所以只能我们自己想各种办法解决,以下是我利用runtime和KVC两种方法来实现这个功能,如有不对或更好的方法,恳请指出。
runtime实现思路:
1、为textView动态添加placeholder属性
2、为textView动态添加placeholderLabel控件,并把placeholder的值赋给它。
3、监听UITextViewTextDidChangeNotification,根据该通知来设置placeholderLabel相对应的文字属性值。
注意事项:
1、使用runtime动态添加的属性:由于setText:可为nil,所以重写此方法后无法正常赋值,因此如果要立马设置text则需先设置text,再设置占位文,占位文字和text会同时显示出来。
2、用KVC方法,如果要立马设置text则需在设置完占位文字后再设置,不然把text删除后占位文字不会出现,且此方法仅支持8.3及以上的系统版本。
3、runtime方式暂不支持多行,KVC支持多行。
效果图:
核心代码如下:
demo传送门:https://github.com/T-Man007/BGMTextViewPlaceholder
欢迎加QQ交流:1960997571
网友评论