定制UITextView,动态改变高度,让UITextView键盘return键回车之后"\n"字符失效

该博客介绍了如何定制一个UITextView,使其在用户按下键盘的return键后,' '字符失效并动态调整自身高度。通过记录输入字符的时间和return键时间对比,来实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在做UITextView动态改变高度的一个类似于微信输入框的demo,网上找了好多资料都没法解决,无奈只有上Github搜索,找到了大神弄的一个自定义第三方UITextView框架:GrowingTextView 网址: https://github.com/HansPinckaers/GrowingTextView   ,但是我弄完放到自己demo中之后,把return之后消息能够发送,发送完之后UITextView却多了一行,究其原因,原来是这个方法      
HPGrowingTextViewDelegate中的 - ( BOOL )growingTextViewShouldReturn:( HPGrowingTextView  *)growingTextView返回YES之后默认是输入"\n",捣鼓了半天都不知道怎么样解决最后我是这样解决的:在ViewController成员变量里边定义两个变量 @property ( strong , nonatomic NSDate  *startTime; @property ( strong , nonatomic NSDate  *endTime;用来记录输入字符时候的时间(startTime)和return之后的时间(endTime ),然后实现协议中的可选方法:
- ( void )growingTextViewDidChange:( HPGrowingTextView  *)growingTextView{

_startTime =[ NSDate   date ];
NSLog ( @"startTime:%@" , _startTime );
if  ( _startTime != _endTime ) {
         if  ([growingTextView. text   isEqualToString : @"\n" ]) {
            growingTextView. text = nil ;
        }
    }
}
- ( void )growingTextViewDidChangeSelection:( HPGrowingTextView  *)growingTextView{
if  ( _startTime != _endTime ) {
         if  ([growingTextView. text   isEqualToString : @"\n" ]) {
            growingTextView. text = nil ;
        }
    }

}
- ( BOOL )growingTextViewShouldReturn:( HPGrowingTextView  *)growingTextView
{
_endTime =[ NSDate   date ];
     NSLog ( @" endTime :%@" ,  _endTime );
     if  ([growingTextView  hasText ]) {
         NSString  *text=[growingTextView  text ];
         NSLog ( @"text:%@ Lengh:%lu" ,text,( unsigned   long )text. length );
        growingTextView. text = nil ;
        [ self . tView   reloadData ];
    }

         return   NO ;



}
代理方法的执行顺序是:- ( void )growingTextViewDidChangeSelection:( HPGrowingTextView  *)growingTextView ->- ( void )growingTextViewDidChange:( HPGrowingTextView  *)growingTextView->- ( BOOL )growingTextViewShouldReturn:( HPGrowingTextView  *)growingTextView->- ( void )growingTextViewDidChangeSelection:( HPGrowingTextView  *)growingTextView

实现的原理很简单,就是记录输入最后一个字符的时间和return时候的时间,然后再代理方法- (void)growingTextViewDidChangeSelection:(HPGrowingTextView *)growingTextView中判断开始和结束时间是否相等(一般是不相等的),如果不相等,判断字符是否为"\n"如果是的话就清空TextView里的字符串。


KEEPStudio出品


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值