@@ -44,24 +44,26 @@ + (RKOTextView *)textViewWithFrame:(CGRect)frame
44
44
textView.maxCharacters = maxCharacters;
45
45
textView.maxRows = maxRows;
46
46
47
- // 设置样式。
48
- [textView configTextViewStyle ];
49
-
50
47
return textView;
51
48
}
52
49
50
+ - (instancetype )init {
51
+ if (self = [super init ]) {
52
+ [self configDefineSytle ];
53
+ }
54
+ return self;
55
+ }
56
+
53
57
// 当从storyboard/xib中初始化该控件的时候
54
58
- (instancetype )initWithCoder : (NSCoder *)aDecoder {
55
-
56
59
if (!(self = [super initWithCoder: aDecoder])) return nil ;
57
60
58
- // 设置样式
59
- [self configTextViewStyle ];
61
+ [self configDefineSytle ];
60
62
61
63
return self;
62
64
}
63
65
64
- - (void )configTextViewStyle {
66
+ - (void )configDefineSytle {
65
67
66
68
// 设置行间距以及换行模式。
67
69
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc ] init ];
@@ -85,16 +87,9 @@ - (void)configTextViewStyle {
85
87
self.showsHorizontalScrollIndicator = NO ;
86
88
self.enablesReturnKeyAutomatically = YES ;
87
89
88
- // 初始属性。
89
- self.needBorder = NO ;
90
+ // 记录上次输入内容
91
+ self.lastTimeInput = self. hasText ? self. text : @" " ;
90
92
91
- if (self.hasText ) {
92
- self.lastTimeInput = self.text ;
93
- } else {
94
- self.lastTimeInput = [NSString string ];
95
- }
96
-
97
- // 设置代理,监听文字输入
98
93
self.delegate = self;
99
94
}
100
95
@@ -140,8 +135,8 @@ - (void)textViewDidChange:(UITextView *)textView {
140
135
}
141
136
142
137
// 提供代理,供用户监听输入
143
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidChange: )]) {
144
- [self .textViewDelegate textViewDidChange: textView];
138
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidChange: )]) {
139
+ [self .rko_textViewDelegate textViewDidChange: textView];
145
140
}
146
141
}
147
142
@@ -153,8 +148,8 @@ - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range r
153
148
return [self limitInputWithTextView: textView range: range replacementText: text];
154
149
}
155
150
156
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textView:shouldChangeTextInRange:replacementText: )]) {
157
- [self .textViewDelegate textView: textView shouldChangeTextInRange: range replacementText: text];
151
+ if (self.delegate && [self .delegate respondsToSelector: @selector (textView:shouldChangeTextInRange:replacementText: )]) {
152
+ [self .delegate textView: textView shouldChangeTextInRange: range replacementText: text];
158
153
}
159
154
160
155
return YES ;
@@ -297,8 +292,8 @@ typedef NS_ENUM(NSUInteger, TriggerType) {
297
292
}
298
293
299
294
// 显示提示窗
300
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxRows: )]) {
301
- [self .textViewDelegate textViewDidAchieveMaxRows: textView];
295
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxRows: )]) {
296
+ [self .rko_textViewDelegate textViewDidAchieveMaxRows: textView];
302
297
}
303
298
}
304
299
@@ -326,8 +321,8 @@ - (void)calculateNumberOfRemainingCharacters:(UITextView *)textView {
326
321
textView.text = str;
327
322
328
323
// 显示提示窗,提示字数限制
329
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
330
- [self .textViewDelegate textViewDidAchieveMaxCharacters: textView];
324
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
325
+ [self .rko_textViewDelegate textViewDidAchieveMaxCharacters: textView];
331
326
}
332
327
}
333
328
}
@@ -351,9 +346,10 @@ - (BOOL)limitInputWithTextView:(UITextView *)textView range:(NSRange)range repla
351
346
return YES ;
352
347
} else {
353
348
// 显示提示窗,提示字数限制
354
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
355
- [self .textViewDelegate textViewDidAchieveMaxCharacters: textView];
349
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
350
+ [self .rko_textViewDelegate textViewDidAchieveMaxCharacters: textView];
356
351
}
352
+
357
353
return NO ;
358
354
}
359
355
}
@@ -392,8 +388,8 @@ - (BOOL)limitInputWithTextView:(UITextView *)textView range:(NSRange)range repla
392
388
// 取出所需要就break,提高效率
393
389
*stop = YES ;
394
390
// 显示提示窗,提示字数限制
395
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
396
- [self .textViewDelegate textViewDidAchieveMaxCharacters: textView];
391
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
392
+ [self .rko_textViewDelegate textViewDidAchieveMaxCharacters: textView];
397
393
}
398
394
return ;
399
395
}
@@ -414,32 +410,15 @@ - (BOOL)limitInputWithTextView:(UITextView *)textView range:(NSRange)range repla
414
410
// 判断子视图是否显示,以及适配高度
415
411
[self judgmentSubviewsDisplayed: textView];
416
412
// 显示提示窗,提示字数限制
417
- if (self.textViewDelegate && [self .textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
418
- [self .textViewDelegate textViewDidAchieveMaxCharacters: textView];
413
+ if (self.rko_textViewDelegate && [self .rko_textViewDelegate respondsToSelector: @selector (textViewDidAchieveMaxCharacters: )]) {
414
+ [self .rko_textViewDelegate textViewDidAchieveMaxCharacters: textView];
419
415
}
416
+
420
417
return NO ;
421
418
}
422
419
}
423
420
424
421
#pragma mark - 占位符
425
- // 初始化占位符Lable
426
- - (void )createPlaceholderLabel {
427
-
428
- // 创建并设置占位符Label
429
- self.placeholderLabel = [[UILabel alloc ] init ];
430
-
431
- self.placeholderLabel .backgroundColor = [UIColor clearColor ];
432
- self.placeholderLabel .numberOfLines = 0 ;
433
- // 设置占位文字默认颜色
434
- self.placeholderLabel .textColor = [UIColor lightGrayColor ];
435
-
436
- // 添加视图
437
- [self addSubview: self .placeholderLabel];
438
-
439
- // 根据初始状态判断占位符是否显示
440
- self.placeholderLabel .hidden = self.hasText ;
441
- }
442
-
443
422
// 对占位符Label进行布局
444
423
- (void )layoutPlaceholderLabel {
445
424
@@ -454,41 +433,51 @@ - (void)layoutPlaceholderLabel {
454
433
self.placeholderLabel .frame = frame;
455
434
}
456
435
457
- // 重写字体的设置方法,保证两个字的大小一样
458
- - (void )setFont : (UIFont *)font {
459
- [super setFont: font];
460
-
461
- if (!self.placeholder || self.placeholder .length == 0 ) {
462
- return ;
463
- }
464
-
465
- // 如果传nil的话则为系统默认大小。
466
- if (!font) {
467
- font = [UIFont systemFontOfSize: [UIFont systemFontSize ]];
468
- }
436
+ // 重写set方法,设置占位符文字
437
+ - (void )setPlaceholder : (NSString *)placeholder {
438
+ _placeholder = [placeholder copy ];
469
439
470
- // 修改占位符文字的大小。
471
- self.placeholderLabel .font = font ;
440
+ // 设置文字
441
+ self.placeholderLabel .text = placeholder ;
472
442
473
443
// 重新计算子控件frame
474
444
[self setNeedsLayout ];
475
445
}
476
446
477
- // 重写set方法,设置占位符文字
478
- - (void )setPlaceholder : (NSString *)placeholder {
479
-
480
- _placeholder = [placeholder copy ];
447
+ - (UILabel *)placeholderLabel {
448
+ if (!_placeholderLabel) {
449
+ _placeholderLabel = [[UILabel alloc ] init ];
450
+
451
+ _placeholderLabel.backgroundColor = [UIColor clearColor ];
452
+ _placeholderLabel.numberOfLines = 0 ;
453
+
454
+ _placeholderLabel.textColor = [UIColor lightGrayColor ];
455
+
456
+ [self addSubview: _placeholderLabel];
457
+
458
+ _placeholderLabel.hidden = self.hasText ;
459
+ }
460
+ return _placeholderLabel;
461
+ }
462
+
463
+ // 保证 font 有值
464
+ - (UIFont *)font {
465
+ if ([super font ]) return [super font ];
466
+ return [UIFont systemFontOfSize: [UIFont systemFontSize ]];
467
+ }
468
+
469
+ // 保持占位符与 TextView 字体相同
470
+ - (void )setFont : (UIFont *)font {
471
+ [super setFont: font];
481
472
482
- // 初始化占位符Lable
483
- [self createPlaceholderLabel ];
473
+ NSString *placeholder = [self .placeholder stringByReplacingOccurrencesOfString: @" " withString: @" " ];
484
474
485
- // 设置文字
486
- _placeholderLabel.text = placeholder;
475
+ if (![placeholder isEqualToString: @" " ] && placeholder.length != 0 ) {
476
+ self.placeholderLabel .font = font;
477
+ }
487
478
488
479
// 重新计算子控件frame
489
480
[self setNeedsLayout ];
490
481
}
491
482
492
483
@end
493
-
494
-
0 commit comments