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
高亮部分不计入已写的个数当中
编辑前.PNG
编辑中,高亮部分不算在内.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循环中的所有语言分别打印如下所示:


所有语言

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


"简体拼音"

切换为简体手写:


"简体手写"

切换为简体拼音:


"简体拼音"

切换为English打印:


"English(US)"

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


"表情符号"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,010评论 3 119
  • 坝糯:被称之为有内涵最低调的山头 。 地理位置:勐库大叶种是首批国家级良种,历代皆为云南名茶,勐库古茶山以冰岛为界...
    桔子微念阅读 798评论 0 0
  • 黑色细绒的鞋面 没有皮革的亮堂光泽 手纳的千层鞋底 远比橡胶软作厚实 绣花的鞋垫 是黄土的希望 你于小麦沉睡的夜晚...
    啣山放翁阅读 313评论 19 9
  • 这世界没有感同身受,只有冷暖自知。 你们在长篇累牍 ,口若悬河时候,有没有想过别人的感受?我可以请你们闭嘴吗? 不...
    安多波姆阅读 470评论 2 4
  • 只是因为在人群中多看了你一眼,我便瞎了眼 多么希望有一天我爱你,可以倒过来写你爱我。 人生四大悲剧:穷得没钱做坏事...
    三品姐姐阅读 3,603评论 0 0