zoukankan      html  css  js  c++  java
  • iOS开发之UITextView,设置textView的行间距及placeholder

     

     

    一、设置textView的行间距

    1.如果只是静态显示textView的内容为设置的行间距,执行如下代码:

    //    textview 改变字体的行间距 
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; 
        paragraphStyle.lineSpacing = 10;// 字体的行间距 
         
        NSDictionary *attributes = @{ 
                                     NSFontAttributeName:[UIFont systemFontOfSize:15], 
                                     NSParagraphStyleAttributeName:paragraphStyle 
                                     }; 
        textView.attributedText = [[NSAttributedString alloc] initWithString:@"输入你的内容" attributes:attributes];

     

    2.如果是想在输入内容的时候就按照设置的行间距进行动态改变,那就需要将上面代码放到textView的delegate方法里

    -(void)textViewDidChange:(UITextView *)textView

    {

        //    textview 改变字体的行间距

        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];

        paragraphStyle.lineSpacing = 20;// 字体的行间距

        

        NSDictionary *attributes = @{

                                     NSFontAttributeName:[UIFont systemFontOfSize:15],

                                     NSParagraphStyleAttributeName:paragraphStyle

                                     };

        textView.attributedText = [[NSAttributedString alloc] initWithString:textView.text attributes:attributes];

     

    }

     

    一、设置textView的placeholder

        UITextView上如何加上类似于UITextField的placeholder呢,其实在UITextView上加上一个UILabel或者UITextView,如果用UILable的话,会出现一个问题就是当placeholder的文字过长导致换行的时候就会出现问题,而用UITextView则可以有效避免此问题。

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

    {    if (![text isEqualToString:@""])

            {

                _placeholderLabel.hidden = YES;

            }

         if ([text isEqualToString:@""] && range.location == 0 && range.length == 1)

            {

                _placeholderLabel.hidden = NO;

            }

        return YES;

    }

     

    说明如下:

      (1) _placeholderLabel 是加在UITextView后面的UITextView,_placeholderLabel要保证和真正的输入框的设置一样,字体设置成浅灰色,然后[_placeholderLabel setEditable:NO];真正的输入框要设置背景色透明,保证能看到底部的_placeholderLabel。

        (2) [text isEqualToString:@""] 表示输入的是退格键

        (3) range.location == 0 && range.length == 1 表示输入的是第一个字符

     

    核心思路就是使用2个UITextView来模拟PlaceHolder的效果,其中做为输入区域的TextView在表面,背景要设为透明,作为PlaceHolder角色的TextView则在底层,两者通过UITextViewDelegate来动态控制。

    代码实现如下:

    复制代码
    //通过判断表层TextView的内容来实现底层TextView的显示于隐藏
    -(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ if(![text isEqualToString:@""]) { [_backgroundTextView setHidden:YES]; } if([text isEqualToString:@""]&&range.length==1&&range.location==0){ [_backgroundTextView setHidden:NO]; } if ([text isEqualToString:@"
    "]) { [textView resignFirstResponder]; return NO; } return YES; }
    复制代码

     

    大概就是上面这样的咯,总之,任何实现都是有可行的替代方案的。

  • 相关阅读:
    网管必备网站地址
    数组是否包含某个元素
    Thinking in java(八)
    Thinking in java(八)
    Java8系列之重新认识HashMap
    Java8系列之重新认识HashMap
    MarkdownPad2.5/2 注册码
    MarkdownPad2.5/2 注册码
    java8函数式编程(2)
    java8函数式编程(2)
  • 原文地址:https://www.cnblogs.com/allen123/p/4595368.html
Copyright © 2011-2022 走看看