01-UITExtView 자리 표시자

3401 단어

1. 문제 해결


모두가 알다시피 UITExtField는 하나의placeholder 속성이 있어 자리를 차지하는 문자나 힌트의 역할을 하지만 UITExtView는 이런 속성이 없다. 본고는 이 문제를 해결하기 위한 것이다.

2. RWTextView 패키지


RWTextView.h

#import 

@interface RWTextView : UIView

/**
 *  UITextView View
 */
+ (instancetype)textView;

/**
 *   
 */
@property (nonatomic, copy) NSString *placeholder;
/**
 *   
 */
@property (nonatomic, assign) CGFloat placeholderFout;
/**
 *   
 */
@property (nonatomic, strong) UIColor *placeholderTitleColor;

@end

RWTextView.m

#import "RWTextView.h"

@interface RWTextView ()

/**
 *   
 */
@property (nonatomic, strong) UILabel *placeHolderLabel;

/**
 *  UITextView
 */
@property (nonatomic, strong) UITextView *textView;

@end

@implementation RWTextView

/**
 *  UITextView View  
 */
+ (instancetype)textView {
    
    return [[self alloc] init];
}

/**
 *  
 */
- (instancetype)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        
        /** 1、    */
        UILabel *placeHolderLabel = [[UILabel alloc] init];
        self.placeHolderLabel = placeHolderLabel;
        self.placeHolderLabel.textColor = [UIColor lightGrayColor];
        [self addSubview:placeHolderLabel];
        
        /** 2、  UItextView */
        UITextView *textView = [[UITextView alloc] init];
        textView.delegate = self;
        textView.backgroundColor = [UIColor clearColor];
        textView.backgroundColor = [UIColor brownColor];
        textView.alpha = 0.3;
        textView.tintColor = [UIColor yellowColor];
        self.textView = textView;
        [self addSubview:textView];
    }
    return self;
}

/**   */
- (void)layoutSubviews {
    
    [super layoutSubviews];
    self.placeHolderLabel.frame = CGRectMake(5, 0, self.bounds.size.width, 30);
    self.textView.frame = self.bounds;
}

/**   */
- (void)setPlaceholder:(NSString *)placeholder {

    _placeholder = placeholder;
    
    self.placeHolderLabel.text = self.placeholder;
  
}

/**   */
- (void)setPlaceholderFout:(CGFloat)placeholderFout {

    _placeholderFout = placeholderFout;
    self.placeHolderLabel.font = [UIFont systemFontOfSize:placeholderFout];
}

/**   */
- (void)setPlaceholderTitleColor:(UIColor *)placeholderTitleColor {

    _placeholderTitleColor = placeholderTitleColor;
    
    self.placeHolderLabel.textColor = placeholderTitleColor;
}

#pragma mark - UITextViewDelegate 
#pragma mark -  textView 
- (void)textViewDidChange:(UITextView *)textView {
    
    if (!textView.text.length) {
        // 
        self.placeHolderLabel.hidden = NO;
    } else {
        // 
        self.placeHolderLabel.hidden = YES;
    }
}


3. 완전한 호출 봉인 대상

#import "ViewController.h"
#import "RWTextView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    //1、 textView
    RWTextView *textView = [RWTextView textView];
    textView.placeholder = @"textView placeholder";
    textView.frame = CGRectMake(100, 100, 200, 100);
    textView.placeholderTitleColor = [UIColor lightGrayColor];
    textView.placeholderFout = 14;
    textView.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:textView];
}

@end

좋은 웹페이지 즐겨찾기