ICRPlaceholderTextView.m 3.51 KB
Newer Older
曹云霄's avatar
曹云霄 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
//
//  ICRPlaceholderTextView.m
//  Cruiser
//
//  Created by Lili Wang on 15/4/7.
//  Copyright (c) 2015年 Xummer. All rights reserved.
//

#import "ICRPlaceholderTextView.h"

@interface ICRPlaceholderTextView ()

@property (unsafe_unretained, nonatomic, readonly) NSString* realText;

- (void) beginEditing:(NSNotification*) notification;
- (void) endEditing:(NSNotification*) notification;

@end

@implementation ICRPlaceholderTextView

@synthesize m_placeholderColor;
@synthesize m_placeHolder;
@synthesize m_realTextColor;

- (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        [self initObserver];
        
    }
    return self;
}

- (void)awakeFromNib {
    [super awakeFromNib];
    [self initObserver];
}

- (void)initObserver {
    [Notification addObserver:self
                                             selector:@selector(beginEditing:)
                                                 name:UITextViewTextDidBeginEditingNotification
                                               object:self];
    [Notification addObserver:self
                                             selector:@selector(endEditing:)
                                                 name:UITextViewTextDidEndEditingNotification
                                               object:self];
    
    self.m_realTextColor = self.textColor;
    self.m_placeholderColor = [UIColor lightGrayColor];
}

#pragma mark -
#pragma mark Setter/Getters 
- (NSString *)realText {
    return [super text];
}

- (void)setTextColor:(UIColor *)textColor {
    if ([self.realText isEqualToString:self.m_placeHolder]) {
        if ([textColor isEqual:self.m_placeholderColor]){
            [super setTextColor:textColor];
        } else {
            self.m_realTextColor = textColor;
        }
    }
    else {
        self.m_realTextColor = textColor;
        [super setTextColor:textColor];
    }
}

- (void)setM_placeHolder:(NSString *)am_placeHolder {
    if ([self.realText isEqualToString:self.m_placeHolder] && ![self isFirstResponder]) {
        self.text = am_placeHolder;
    }
    if (am_placeHolder != self.m_placeHolder) {
        m_placeHolder = am_placeHolder;
    }
    
    
    [self endEditing:nil];
}

- (void)setM_placeholderColor:(UIColor *)am_placeholderColor {
    m_placeholderColor = am_placeholderColor;
    
    if ([super.text isEqualToString:self.m_placeHolder]) {
        self.textColor = self.m_placeholderColor;
    }
}

- (NSString *)text {
    NSString* text = [super text];
    if ([text isEqualToString:self.m_placeHolder]) return @"";
    return text;
}

- (void) setText:(NSString *)text {
    if (([text isEqualToString:@""] || text == nil) && ![self isFirstResponder]) {
        super.text = self.m_placeHolder;
    }
    else {
        super.text = text;
    }
    
    if ([text isEqualToString:self.m_placeHolder] || text == nil) {
        self.textColor = self.m_placeholderColor;
    }
    else {
        self.textColor = self.m_realTextColor;
    }
}
#pragma mark -
#pragma mark - Observer Actions

- (void) beginEditing:(NSNotification*) notification {
    if ([self.realText isEqualToString:self.m_placeHolder]) {
        super.text = nil;
        self.textColor = self.m_realTextColor;
    }
}

- (void) endEditing:(NSNotification*) notification {
    if ([self.realText isEqualToString:@""] || self.realText == nil) {
        super.text = self.m_placeHolder;
        self.textColor = self.m_placeholderColor;
    }
}

#pragma mark -
#pragma mark Dealloc

- (void)dealloc {
    
    [Notification removeObserver:self];
}
@end