一、实现的逻辑很简单且代码量不多,直接贴出源码供方便快速使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@property (nonatomic, strong) UITextView *textView;
@property (nonatomic, strong) UILabel *limitLabel;
_textView = [[UITextView alloc] initWithFrame:CGRectMake(
5
,
5
, MAIN_WIDTH-
10
,
130.3
)];
_textView.placeHolder = @
"请描述您的问题..."
;
_textView.returnKeyType = UIReturnKeyDone;
_textView.delegate = self;
_textView.textColor = UIColorFromRGB(
0xBEBDBD
);
_textView.font = [UIFont systemFontOfSize:
15
];
[self addSubview:_textView];
_limitLabel = [[UILabel alloc] initWithFrame:CGRectMake(MAIN_WIDTH/
4
*
3
,
130.3
, MAIN_WIDTH/
4
-
10
,
20
)];
_limitLabel.text = @
"0/500"
;
_limitLabel.font = [UIFont systemFontOfSize:
12
];
_limitLabel.textAlignment = NSTextAlignmentRight;
_limitLabel.textColor = UIColorFromRGB(
0x999999
);
_limitLabel.backgroundColor = [UIColor clearColor];
|
二、实现TextView代理方法
实时监听TextView输入框的return键,当点击return键时结束编辑的实现思路:判断输入的字是否为\n回车,即按下return键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
- (
void
)textViewDidChange:(UITextView *)textView {
_limitLabel.text = [NSString stringWithFormat:@
"%ld/500"
,textView.text.length ];
}
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
NSLog(@
"textLength == %ld"
,textView.text.length);
if
([text isEqualToString:@
"\n"
]){
//判断输入的字是否是回车,即按下return
[self.textView resignFirstResponder];
return
NO;
}
if
([self stringContainsEmoji:text] == YES) {
[PubllicMaskViewHelper showTipViewWith:@
"不支持输入Emoji表情符号"
inSuperView:self withDuration:
1
];
return
NO;
}
if
(textView.text.length + text.length >
500
) {
NSString *allText = [NSString stringWithFormat:@
"%@%@"
,textView.text,text];
textView.text = [allText substringToIndex:
500
];
[PubllicMaskViewHelper showTipViewWith:@
"输入不能超过500个字"
inSuperView:self withDuration:
1
];
return
NO;
}
return
YES;
}
|
三、过滤所有Emoji表情符号
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
|
// 过滤所有表情
- (BOOL)stringContainsEmoji:(NSString *)string {
__block BOOL returnValue = NO;
[string enumerateSubstringsInRange:NSMakeRange(
0
, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
const
unichar hs = [substring characterAtIndex:
0
];
// surrogate pair
if
(
0xd800
<= hs && hs
1
) {
const
unichar ls = [substring characterAtIndex:
1
];
const
int
uc = ((hs -
0xd800
) *
0x400
) + (ls -
0xdc00
) +
0x10000
;
if
(
0x1d000
<= uc && uc
1
) {
const
unichar ls = [substring characterAtIndex:
1
];
if
(ls ==
0x20e3
) {
returnValue = YES;
}
}
else
{
// non surrogate
if
(
0x2100
<= hs && hs <=
0x27ff
) {
returnValue = YES;
}
else
if
(
0x2B05
<= hs && hs <=
0x2b07
) {
returnValue = YES;
}
else
if
(
0x2934
<= hs && hs <=
0x2935
) {
returnValue = YES;
}
else
if
(
0x3297
<= hs && hs <=
0x3299
) {
returnValue = YES;
}
else
if
(hs ==
0xa9
|| hs ==
0xae
|| hs ==
0x303d
|| hs ==
0x3030
|| hs ==
0x2b55
|| hs ==
0x2b1c
|| hs ==
0x2b1b
|| hs ==
0x2b50
) {
returnValue = YES;
}
}
}];
return
returnValue;
}
|