textView禁止输入空格与表情 && 自动换行

闲暇时间自定义PNTextView : UITextView,禁止输入空格、高度自适应、选择是否可输入表情符号等等

需求:需要一个可以输入的文本框,不能输入空格、表情。常见的也有字数个数限定
1、不设定最大输入字数(输入字数超过一行,要自动换行)
2、设定最大输入字数(超过该字数,就不准再输入,光亮部分个数不计算在内)

demo 一 不设定最大输入个数,且可以输入表情符号:
不设定最大输入字符且可输入表情.gif
代码实现
/// 文本框
    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),且不可以输入表情符号
设定最大输入字符不可输入表情.gif
高亮部分不计入已写的个数当中
textView禁止输入空格与表情 && 自动换行_第1张图片
编辑前.PNG
textView禁止输入空格与表情 && 自动换行_第2张图片
编辑中,高亮部分不算在内.PNG
// 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循环中的所有语言分别打印如下所示:


textView禁止输入空格与表情 && 自动换行_第3张图片
所有语言

默认输入法是(我用的是苹果输入法):


"简体拼音"

切换为简体手写:


"简体手写"

切换为简体拼音:


"简体拼音"

切换为English打印:


"English(US)"

切换为表情之后的打印是:


"表情符号"

你可能感兴趣的:(textView禁止输入空格与表情 && 自动换行)