博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS自定义数字键盘
阅读量:7115 次
发布时间:2019-06-28

本文共 2628 字,大约阅读时间需要 8 分钟。

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

效果图

调用示例

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

实现步骤

  • 定义一个键盘视图EBNumberKeyboardView在里面写好布局,代码没什么难点,这里就不贴出布局代码了,代理里面我定义了四个回调方法。
@protocol EBNumberKeyboardViewDelegate 
@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]删除文本,会从光标那里开始往前删除。

转载地址:http://sdzel.baihongyu.com/

你可能感兴趣的文章
C# Application.DoEvents() 处理队列消息,防界面假死。
查看>>
python基础===python实现截图
查看>>
Django模型
查看>>
Quartus中代码字体大小的调整方法
查看>>
配置url防盗链、目录权限访问控制Directory、文件访问权限控制FilesMatch
查看>>
【spring boot】4.spring boot配置多环境资源文件
查看>>
关于datepicker如何获取月中日长
查看>>
神经网络练习四-ex4
查看>>
通用for_each清理容器模板函数
查看>>
MVC5发布到IIS,出现HTTP 错误 404.0 - Not Found的完美解决方法
查看>>
c# 与 java 语法异同
查看>>
cleanup failed because the file not under version control问题的解决
查看>>
html+css+js实现滑动导航条(转载)
查看>>
BZOJ 2039人员雇佣
查看>>
angular ng-repeat出来的数据 每条修改数据后返回给接口 如何取到每个对应修改的值...
查看>>
nodeJs express mongodb 建站(linux 版)
查看>>
java使用websocket,并且获取HttpSession,源码分析
查看>>
odoo开发笔记 -- 视图继承扩展
查看>>
图书管理系统——面向对象程序设计
查看>>
ASP.NET发送电子邮件
查看>>