之前在做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
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出品