zoukankan      html  css  js  c++  java
  • ios给textView提价提示性文字

    不推荐使用的方式

    但是在用的时候才发现原来textView没有类似于textField的那种placeholder功能。所谓placeholder就比如用户看到一个输入框,然后输入框里面一般会有几个浅灰色的文字,告诉用户这个地方是用来写什么内容的,当用户开始输入的时候,这几个文字就自然而然地消失了。这几个文字就是'Placeholder'。

    在.m文件中实现textview delegate的两个方法:

    注意:不要忘了在textView的位置写上

      textView.delegate = self;

    (BOOL) textViewShouldBeginEditing:(UITextView *)textView

    {
        if(textView.tag == 0) {
            textView.text = @"";
            textView.textColor = [UIColor blackColor];
            textView.tag = 1;
        }
        return YES;
    }
    - (void)textViewDidChange:(UITextView *)textView
    {
       if([textView.text length] == 0)
       {
           textView.text = @"Foobar placeholder";
           textView.textColor = [UIColor lightGrayColor];
           textView.tag = 0;
       }
    }

    Tip:使用textView的代理需要在头文件中加入: <UITextViewDelegate>

    注意:这种方法确实可以实现我们想要的功能,但是有一个很明显的bug:如果用户输入了几个字以后,想全部删除了重新输入内容,那就会发现你永远都没法删除干净,因为当你把最后一个字后,textViewDidChange方法就监测到textView.text的 length = 0了 于是就会自动帮你不上你想要显示的placeholder。。。可以脑补下那个画面,疯狂地删除,却怎么也删不干净。

    建议采用以下方法

    然后就采用了另外的方法,就是添加一个label,这个label里面写入你想要显示的placeholder,然后还是在textViewDidChange方法里面,如果当前的text长度为0,就把label显示出来,否则的话,就把Label隐藏了。

    把我的程序里面和这部分内容相关的摘出来吧:

    .h文件

    @interface FeedbackViewController : UIViewController<UITextViewDelegate,UIAlertViewDelegate>
    
    @propert(strong,nonatomic) IBOutlet UITextView *textView;
    
    @end

    .m文件

    viewDidLoad函数:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
       
        label = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, 200, 20)];
        label.enabled = NO;
        label.text = @"在此输入反馈意见";
        label.font =  [UIFont systemFontOfSize:15];
        label.textColor = [UIColor lightGrayColor];
        [self.textView addSubview:label];
    }

    初始化的时候把label的内容设置一下。注意这个label是添加在textView里面的,我调试了一下 起始位置(3,3)是个还算不错的位置。注意要把label设置成不可点击。

    //TextView Delegate

    //可以判断是否超出最大限额 如140  (可写这个方法也可不写)

    - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{ 
    if ([text isEqualToString:@""] && range.length > 0) {  
      //删除字符肯定是安全的  
      return YES; 
    }  else{  
      if (textView.text.length - range.length + text.length > 140) {
         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"超出最大可输入长度" message:nil delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil];//如果输入的文字大于140 则提示 <span style="font-family: Arial, Helvetica, sans-serif;">"超出最大可输入长度" 并不能继续输入文字</span>  
        [alert show];  
        return NO;   
        }  
    else { 
           
    return YES; 
         
    }  
       }  
    }  
    - (void) textViewDidChange:(UITextView *)textView{
        if ([textView.text length] == 0) {
            [label setHidden:NO];
        }else{
            [label setHidden:YES];
        }
    }
  • 相关阅读:
    bugku 求getshell
    HTTP之content-type
    web之robots.txt
    HTTP之User-Agent大全
    bugku 细心
    PHP输入流
    bugku web8
    PHP中sha1()函数和md5()函数的绕过
    bugku 各种·绕过
    【学术篇】烧水问题 打表找规律做法
  • 原文地址:https://www.cnblogs.com/sunfuyou/p/6134503.html
Copyright © 2011-2022 走看看