iOS自定义数字键盘

美观简洁的数字键盘,支持小数、整数、负数、文本长度的控制

效果图

EBNumberTextField.gif

github地址:https://github.com/woheduole/EBCustomControls

调用示例

    EBNumberTextField *textField = [[EBNumberTextField alloc] initWithFrame:CGRectMake(115, y, 150, 30)];
    // 键盘类型
    textField.numberKeyboardType = EBNumberKeyboardTypeInteger;
    // 文本长度
    textField.maxLength = 5;
    [self.view addSubview:textField];

实现步骤

  • 定义一个键盘视图EBNumberKeyboardView在里面写好布局,代码没什么难点,这里就不贴出布局代码了,代理里面我定义了四个回调方法。
@protocol EBNumberKeyboardViewDelegate <NSObject>
@optional
// 输入数字、小数点、负号
- (void)numberKeyboardViewEditing:(EBNumberKeyboardView *)keyboardView text:(NSString*)text;
// 点击完成输入
- (void)numberKeyboardViewEndEditing:(EBNumberKeyboardView *)keyboardView;
// 删除字符
- (void)numberKeyboardViewDeleteText:(EBNumberKeyboardView *)keyboardView;
// 清空文本
- (void)numberKeyboardViewClearText:(EBNumberKeyboardView *)keyboardView;
@end
  • 定义一个继承自UITextField的视图EBNumberTextField,在里面指定self.inputView = "定义的键盘视图"。
- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        _maxLength = 0;
        EBNumberKeyboardView *numberKeyboardView = [[EBNumberKeyboardView alloc] initWithKeyboardType:EBNumberKeyboardTypeDecimal];
        numberKeyboardView.delegate = self;
        self.inputView = numberKeyboardView;
        /*
         1.当使用第三方键盘管理类IQKeyboardManager,禁用toolBar
         2.如果没有用到第三方键盘管理可以不加这行代码
         3.可以把[UIView new]替换成一个自定义的视图来实现IQKeyboardManager的toolbar功能
         */
        self.inputAccessoryView = [UIView new];
        _numberKeyboardView = numberKeyboardView;
    }
    return self;
}

#pragma mark - EBNumberKeyboardViewDelegate
// 输入数字、小数点、负号
- (void)numberKeyboardViewEditing:(EBNumberKeyboardView *)keyboardView text:(NSString*)text {
    if ([text isEqualToString:kEBNumberKeyboardViewDotKey]) {
        // 小数点不能在第一位并且只能有一个小数点
        if (self.text.length == 0
            || [self.text rangeOfString:kEBNumberKeyboardViewDotKey].location != NSNotFound) {
            return;
        }
    }else if([text isEqualToString:kEBNumberKeyboardViewMinusKey]) {
        // 负号只能在第一位
        if (self.text.length > 0) {
            return;
        }
    }
    NSString *fullText = [self.text stringByAppendingString:text];
    if (_maxLength >0 && fullText.length > _maxLength) {
        return;
    }
    [self insertText:text];
}
// 点击完成输入
- (void)numberKeyboardViewEndEditing:(EBNumberKeyboardView *)keyboardView {
    [self resignFirstResponder];
}
// 删除字符
- (void)numberKeyboardViewDeleteText:(EBNumberKeyboardView *)keyboardView {
    [self deleteBackward];
}
// 清空文本
- (void)numberKeyboardViewClearText:(EBNumberKeyboardView *)keyboardView {
    self.text = @"";
}

注意:
调用[self insertText:text]插入输入文本,这样光标在哪,插入的代码就在哪。
通过[self deleteBackward]删除文本,会从光标那里开始往前删除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容

  • 来自产品经理的"简单"需求一则 需求:在输入身份证号码的时候,弹出来的键盘是能够切换到字母的九宫格数字键盘。(左边...
    伊尔今夏阅读 10,449评论 5 33
  • 在开发中经常碰到一些会用到自定义的数字键盘的,这些一般都是随机或者按照一定的规则来生成的数字键盘,这段时间刚好有这...
    fuaiyi阅读 2,178评论 0 2
  • 在网上找了很多,都不能用.找到了这个 给大家分享下,五分钟搞定 不用引用头文件跟三方库 UIImage *qrco...
    井空烀地瓜阅读 651评论 0 0
  • 上一节总结的主要的流程是 收集搜索-筛选明确-练习(辅助资源)-(写作,ppt,演讲)输出 聚焦于输出的学习,自然...
    whalecao阅读 502评论 0 0
  • 刻意练习的时间是重要的差别,最杰出的人是那些在各种有目的的练习中花了最多时间的人. 刻意练习的几个特点: 1.刻意...
    一竺阅读 165评论 0 0