zoukankan      html  css  js  c++  java
  • iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧

    1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现

    • 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UITextView *)textView
    • 通过UITextView的contentSize的高度来决定textView的高度.随着TextView中文字的增多,TextView的contentSize也会随着变化,所以实现这个功能,contentSize是个很重要的属性

    - (void)textViewDidChange:(UITextView *)textView
    {
        CGFloat textViewMinHeight = 33; // TextView最小高度
        CGFloat textViewMaxHeight = 83; // TextView最大高度
        // 重要属性
        CGFloat textViewContentH = textView.contentSize.height;
    
    //    NSLog(@"%@",NSStringFromCGSize(textView.contentSize));
        // 1.计算TextView的高度
        if (textViewContentH < textViewMinHeight) { // 小于最小值的情况
            _textViewHeightConstraint.constant = textViewMinHeight;
        } else if (textViewContentH > textViewMaxHeight) { // 大于最大值情况
            _textViewHeightConstraint.constant = textViewMaxHeight;
        } else { // 其余情况高度随着内容的高度变化
            _textViewHeightConstraint.constant = textViewContentH;
        }
    
        if ([textView.text hasSuffix:@"
    "]) { // 判断是否为发送,就是判断是否有回车符
            NSLog(@"发送消息");
            // 发送消息后,高度复原
            _textViewHeightConstraint.constant = textViewMinHeight;
            [self sendTextMsg:textView.text];
            // 清空内容
            textView.text = nil;
        }
        // 2.计算底部工具条的高度
        self.bottomToolBarHeightConstraint.constant = 8 + 8 + _textViewHeightConstraint.constant;
    
        // 3.添加动画效果
        [UIView animateWithDuration:0.25 animations:^{
            [self.view layoutIfNeeded];
        }];
        // 4.让TextView中的光标回到0位置
    #warning TextView光标复位的小技巧
        [textView setContentOffset:CGPointZero animated:YES]; // 这一句就能够起作用
        [textView scrollRangeToVisible:textView.selectedRange]; // 不加这句也可以
    }
    
    

    2.文本信息点击了发送之后,TextView的光标位置变了

    • 造成这一问题的主要原因是TextView的contentSize变化了,贯标位置就跟着变化了
    • 光标复位小技巧,经过测试只有第一行代码也是可以的
        // 4.让TextView中的光标回到0位置
    #warning TextView光标复位的小技巧
        [textView setContentOffset:CGPointZero animated:YES]; // 这一句就能够起作用
        [textView scrollRangeToVisible:textView.selectedRange]; // 不加这句也可以
    
  • 相关阅读:
    实验证明:ObjectiveC++ 完美支持 ARC
    用 Java 实现的日志切割清理工具
    数字电视,方便了谁
    商品EAN13条码的生成
    关于错误“Cannot connect to the Citrix MetaFrame server.Can't assign requested address”的解决方法
    "加载类型库/dll时出错" 的解决方法
    解决连接SQL Server 2000的TCP/IP错误的Bug
    电脑自动关机之CPU风扇烧坏
    winrar 8 注册方法
    电脑死机之CPU温度过高
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5693541.html
Copyright © 2011-2022 走看看