闲暇时间自定义PNTextView : UITextView
,禁止输入空格、高度自适应、选择是否可输入表情符号等等
需求:需要一个可以输入的文本框,不能输入空格、表情。常见的也有字数个数限定
1、不设定最大输入字数(输入字数超过一行,要自动换行)
2、设定最大输入字数(超过该字数,就不准再输入,光亮部分个数不计算在内)
demo 一 不设定最大输入个数,且可以输入表情符号:
代码实现
/// 文本框
PNTextView *textView = [[PNTextView alloc] init];
textView.font = [UIFont systemFontOfSize:18.0];
textView.placeholderText = @"请输入姓名";
textView.backgroundColor = [UIColor greenColor];
[self.view addSubview:textView];
self.textView = textView;
// textView与masonry绝配 高度不固定
[textView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(150);
make.left.mas_equalTo(10);
make.width.mas_offset(SCREEN_WIDTH - 10 * 2);
}];
demo 二 设定最大输入个数(比如30),且不可以输入表情符号
高亮部分不计入已写的个数当中
// textView设置属性
textView.maxTextLength = 30; // 输入最大长度
textView.emoticonsDisEnable = YES; // 不能输入表情
/// 显示剩余个数的通过block回调,回调事件不多 ,故用block
UILabel *lastLength = [[UILabel alloc] init];
lastLength.backgroundColor = [UIColor greenColor];
lastLength.text = textView.maxTextLength == -1 ? @"未设定最大输入数" : [NSString stringWithFormat:@"剩余可输入字数:%tu", textView.maxTextLength];
[self.view addSubview:lastLength];
[lastLength mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(line1.mas_bottom).offset(30);
make.centerX.mas_equalTo(textView);
}];
///显示剩余个数的block
textView.lastTextLength = ^(NSInteger length) {
lastLength.text = [NSString stringWithFormat:@"剩余可输入字数:%tu", length];
};
demo PNTextView
附加其他:
利用通知监听语言的切换(代码中不需要写,只是测试)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(languageChanged:) name:UITextInputCurrentInputModeDidChangeNotification object:nil];
/// 判断语言切换
-(void)languageChanged:(NSNotification*)notification
{
for(UITextInputMode *mode in [UITextInputMode activeInputModes])
{
NSLog(@"Input mode: %@", mode);
NSLog(@"Input language: %@", mode.primaryLanguage);
}
NSLog(@"Notification: %@", notification);
UITextInputMode *current = self.textView.textInputMode;
NSLog(@"Current: %@", current.primaryLanguage);
}
说明:通知记得在dealloc移除掉;
通知的这个方法是为了监听语言的切换,for循环中的所有语言分别打印如下所示:
默认输入法是(我用的是苹果输入法):
切换为简体手写:
切换为简体拼音:
切换为English打印:
切换为表情之后的打印是: