Placeholder in UITextView

前端 未结 30 3122
野趣味
野趣味 2020-11-22 16:01

My application uses an UITextView. Now I want the UITextView to have a placeholder similar to the one you can set for an UITextField.<

30条回答
  •  借酒劲吻你
    2020-11-22 16:05

    this is how I did it:

    UITextView2.h

    #import 
    
    @interface UITextView2 : UITextView  {
     NSString *placeholder;
     UIColor *placeholderColor;
    }
    
    @property(nonatomic, retain) NSString *placeholder;
    @property(nonatomic, retain) UIColor *placeholderColor;
    
    -(void)textChanged:(NSNotification*)notif;
    
    @end
    

    UITextView2.m

    @implementation UITextView2
    
    @synthesize placeholder, placeholderColor;
    
    - (id)initWithFrame:(CGRect)frame {
        if (self = [super initWithFrame:frame]) {
            [self setPlaceholder:@""];
            [self setPlaceholderColor:[UIColor lightGrayColor]];
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextViewTextDidChangeNotification object:nil];
        }
        return self;
    }
    
    -(void)textChanged:(NSNotification*)notif {
        if ([[self placeholder] length]==0)
            return;
        if ([[self text] length]==0) {
            [[self viewWithTag:999] setAlpha:1];
        } else {
            [[self viewWithTag:999] setAlpha:0];
        }
    
    }
    
    - (void)drawRect:(CGRect)rect {
        if ([[self placeholder] length]>0) {
            UILabel *l = [[UILabel alloc] initWithFrame:CGRectMake(8, 8, 0, 0)];
            [l setFont:self.font];
            [l setTextColor:self.placeholderColor];
            [l setText:self.placeholder];
            [l setAlpha:0];
            [l setTag:999];
            [self addSubview:l];
            [l sizeToFit];
            [self sendSubviewToBack:l];
            [l release];
        }
        if ([[self text] length]==0 && [[self placeholder] length]>0) {
            [[self viewWithTag:999] setAlpha:1];
        }
        [super drawRect:rect];
    }
    
    - (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
        [super dealloc];
    }
    
    
    @end
    

提交回复
热议问题