-
Notifications
You must be signed in to change notification settings - Fork 0
/
TVTextView.m
118 lines (96 loc) · 2.54 KB
/
TVTextView.m
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
//
// TVTextView.m
// Sword
//
// Created by zhoujinrui on 15/12/22.
// Copyright © 2015年 Topvogues. All rights reserved.
//
#import "TVTextView.h"
@interface TVTextView ()
@property (nonatomic, strong) UITextView* placeholderView;
@end
@implementation TVTextView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
[self commonInit];
}
return self;
}
- (instancetype)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self)
{
[self commonInit];
}
return self;
}
- (void)commonInit
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveTextChangeNotification:) name:UITextViewTextDidChangeNotification object:self];
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark - Setter/Getters
- (UITextView *)placeholderView
{
if (!_placeholderView
&& self.placeholder.length > 0)
{
_placeholderView = [[UITextView alloc] initWithFrame:self.bounds];
[self insertSubview:_placeholderView atIndex:0];
[self updatePlaceholderHiddenState];
_placeholderView.userInteractionEnabled = NO;
_placeholderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
_placeholderView.backgroundColor = [UIColor clearColor];
_placeholderView.text = self.placeholder;
_placeholderView.textColor = self.placeholderColor;
_placeholderView.font = self.font;
_placeholderView.textAlignment = self.textAlignment;
}
return _placeholderView;
}
- (UIColor *)placeholderColor
{
if (!_placeholderColor)
{
_placeholderColor = [UIColor colorWithHexValue:0xd5d5d5];
}
return _placeholderColor;
}
- (void)setFont:(UIFont *)font
{
[super setFont:font];
self.placeholderView.font = font;
}
- (void)setTextAlignment:(NSTextAlignment)textAlignment
{
[super setTextAlignment:textAlignment];
self.placeholderView.textAlignment = textAlignment;
}
- (void)setText:(NSString *)text
{
[super setText:text];
[self updatePlaceholderHiddenState];
}
#pragma mark - Notification
- (void)didReceiveTextChangeNotification:(NSNotification*)notification
{
[self updatePlaceholderHiddenState];
}
#pragma mark - Layout
- (void)layoutSubviews
{
[super layoutSubviews];
[self.placeholderView sendToBack];
}
- (void)updatePlaceholderHiddenState
{
self.placeholderView.hidden = self.text.length > 0;
}
@end