UITextView 的Placeholder(分类和继承实现)

一、前言

其实这个以前我已经实现过了,不过是用继承的方式来实现的,最近发现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调整
UITextView 的Placeholder(分类和继承实现)_第1张图片
Snip20161103_4.png
  • 2、水印label的字体必须要设置,不然水印label会向上偏移,一般来说,水印字体和textView的字体一致,但问题是,如果不设置textView的字体,系统默认返回一个nil,此处如果没有设置,默认给textView一个字体

  • 3、系统默认text是空字符串,如果有输入内容,就隐藏水印,不再显示,防止输入后再赋值新的水印后显示出来

    UITextView 的Placeholder(分类和继承实现)_第2张图片
    Snip20161103_5.png

四、总结

  • 继承和分类使用起来都差不多,只是换种方式实现,继承实现起来相对分类来说麻烦点,个人还是比较喜欢分类,不过继承实现的话,容易拓展以及自定义,如果只是需要不高,分类能实现就用分类

  • 因为分类使用了系统的私有API,所以上线的时候可能运气不好被拒

gitHub地址 欢迎大家关注我,喜欢就给个like 和 star ,多支持支持,随时更新~谢谢

你可能感兴趣的:(UITextView 的Placeholder(分类和继承实现))