返回顶部
首页 > 资讯 > 移动开发 >iOS自定义身份证键盘
  • 581
分享到

iOS自定义身份证键盘

iOS身份证键盘 2022-05-27 13:05:20 581人浏览 泡泡鱼
摘要

本文实例为大家分享了iOS自定义身份证键盘的具体代码,供大家参考,具体内容如下 项目中有需要需要身份证的输入框, 用自带的输入切换很麻烦(如果最后一位带X), 所以自定义一个身份证输

本文实例为大家分享了iOS自定义身份证键盘的具体代码,供大家参考,具体内容如下

项目中有需要需要身份证的输入框, 用自带的输入切换很麻烦(如果最后一位带X), 所以自定义一个身份证输入键盘.

自定义键盘的关键: self.textField.inputView = [自定义的view], 

支持长按一直删除

demo地址

开始自定义

创建一个集成自UIView的视图 (NYLIDKeyBoard)

NYLIDKeyBoard.h


//
// NYLIDKeyBoard.h
// lqz
//
// Created by 聂银龙 on 2017/9/7.
// Copyright © 2017年 lqz. All rights reserved.
// 身份证键盘
 
#import <UIKit/UIKit.h>
 
@class NYLIDKeyBoard;
 
@protocol NYKIDKeyBoardDelegate <NSObject>
 
@optional
 

- (void)idKeyboard:(NYLIDKeyBoard *)idKeyboard inputSring:(NSMutableString *)inputString;
 
@end
 
@interface NYLIDKeyBoard : UIView
 
@property(nonatomic, assign) id<NYKIDKeyBoardDelegate>delegate;
 
// 输入的字符串
@property(nonatomic, strong) NSMutableString *inputString;
 
@end

NYLIDKeyBoard.m


//
// NYLIDKeyBoard.m
// lqz
//
// Created by 聂银龙 on 2017/9/7.
// Copyright © 2017年 lqz. All rights reserved.
//
 
#import "NYLIDKeyBoard.h"
 
#define RGB(r,g,b)   [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0]
 
// 屏幕高度
#define SCREEN_HEIGHT   [[UIScreen mainScreen] bounds].size.height
// 屏幕宽度
#define SCREEN_WIDTH   [[UIScreen mainScreen] bounds].size.width
#define GETSIZE(num) (SCREEN_WIDTH/375*num)
 
 
@implementation NYLIDKeyBoard
 

 

- (instancetype)initWithFrame:(CGRect)frame
{
 self = [super initWithFrame:frame];
 if (self) {
  self.inputString = [NSMutableString string];
  [self initViewFrame:frame];
 }
 return self;
}

 
- (void)initViewFrame:(CGRect)frame {
 self.userInteractionEnabled = YES;
 CGFloat width = frame.size.width;
 CGFloat height = frame.size.height;
// 
// UIView *topBgView = nil;
// topBgView = [[UIView alloc] initWithFrame:CGRectMake(-1, 0, width +2, 40)];
// topBgView.backgroundColor = RGB(249, 249, 249);//[UIColor colorWithWhite:0.92 alpha:0.92];
// topBgView.userInteractionEnabled = YES;
// topBgView.layer.borderColor = RGB(214, 213, 214).CGColor;
// topBgView.layer.borderWidth = 0.6;
// topBgView.alpha = 0.99;
// [self addSubview:topBgView];
// 
// UIButton *okBtn = [UIButton buttonWithType:(UIButtonTypeCustom)];
// okBtn.frame = CGRectMake(SCREEN_WIDTH-50-4, 0, 50, 40);
// [okBtn setTitle:@"完成" forState:(UIControlStateNORMal)];
// [okBtn setTitleColor:BASE_BACKGROUNG_BLUE_COLOR forState:(UIControlStateNormal)];
// [okBtn setTitleColor:[UIColor blueColor] forState:(UIControlStateHighlighted)];
// [topBgView addSubview:okBtn];
// [okBtn addTarget:self action:@selector(okbtnClick) forControlEvents:(UIControlEventTouchUpInside)];
 
 NSInteger totalColumns = 3;  // 总列数
 CGFloat cellW = width/3; // 每个格子的宽度
 CGFloat cellH = GETSIZE(54);    // 格子高度
 
 NSArray *titles = @[@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", @"9", @"X", @"0", @""];
 for (int i = 0; i < titles.count ; i++) {
  
  int row = i / totalColumns; // 行
  int col = i % totalColumns; // 列
  //根据行号和列号来确定 子控件的坐标
  CGFloat cellX = col * cellW;
  CGFloat cellY = row * cellH;
  
  
  UIButton *btn = [UIButton buttonWithType:(UIButtonTypeCustom)];
  
  btn.frame = CGRectMake(cellX, cellY, cellW, cellH);
  [btn setTitle:titles[i] forState:(UIControlStateNormal)];
  btn.titleLabel.font = [UIFont boldSystemFontOfSize:20];
  [btn setTitleColor:[UIColor blackColor] forState:(UIControlStateNormal)];
  
  [btn setBackgroundImage:[UIImage imageNamed:@"nyl_keyboard_white"] forState:(UIControlStateNormal)];
  [btn setBackgroundImage:[UIImage imageNamed:@"nyl_keyboard"] forState:(UIControlStateHighlighted)];
  
  [self addSubview:btn];
  btn.tag = 100 + i;
  //NSLog(@"%.2f === %.2f == %.2f", btn.left, cellX, btn.bottom);
  [btn addTarget:self action:@selector(actionBtnClick:) forControlEvents:(UIControlEventTouchUpInside)];
  
  if (btn.tag == 111) { // 删除按钮
   //button长按事件
    UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(btnLong:)];
    //longPress.minimumPressDuration = ; //定义按的时间
   [btn addGestureRecognizer:longPress];
   
   
   // 删除按钮上面加图片
   UIImageView *delImageV = [[UIImageView alloc] init];
   delImageV.image = [UIImage imageNamed:@"nylKeyBoard_del"];
   
   CGFloat img_width = cellW / 4.6;
   CGFloat img_height = img_width * 30 / 40; // 比例高度
   
   delImageV.frame = CGRectMake( (cellW - img_width) / 2, (cellH - img_height) / 2, img_width, img_height);
   [btn addSubview:delImageV];
   
   
  }
  
 }
 
 
 //CGFloat topBottom = topBgView.bottom;
 
 
 // 竖线
 for (int i = 0; i < 2; i++) {
  
  UIView *line = [[UIView alloc] initWithFrame:CGRectMake(cellW + i * (cellW), 0, 0.5, height)];
  line.backgroundColor = RGB(214, 213, 214);
  [self addSubview:line];
 }
 
 // 横线
 for (int i = 0; i < 3; i++) {
    UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, cellH+ i * cellH, width, 0.5)];
  line.backgroundColor = RGB(214, 213, 214);
  [self addSubview:line];
 }
 
}
 
 
- (void)okbtnClick {
 [self removeFromSuperview];
 if (_delegate && [_delegate respondsToSelector:@selector(idKeyboard:inputSring:)]) {
  [_delegate idKeyboard:self inputSring:self.inputString];
 }
}
 
 
- (void)actionBtnClick:(UIButton *)btn {
 NSLog(@"自定义键盘按钮方法===== %@", btn.titleLabel.text);
 
 
 if (btn.tag == 111 && self.inputString.length > 0) {
  [self.inputString deleteCharactersInRange:NSMakeRange(self.inputString.length-1, 1)];
 } else {
  
  if (btn.tag != 111) {
   [self.inputString appendString:btn.titleLabel.text];
  }
 }
 
 
 if (_delegate && [_delegate respondsToSelector:@selector(idKeyboard:inputSring:)]) {
  [_delegate idKeyboard:self inputSring:self.inputString];
 }
}
 
 
 
#pragma mark - 长按钮删除
-(void)btnLong:(UILongPressGestureRecognizer *)gestureRecognizer{
 
 if (self.inputString.length > 0) {
  [self.inputString deleteCharactersInRange:NSMakeRange(self.inputString.length-1, 1)];
  
  NSLog(@"长按==== %@", self.inputString);
  
  if (_delegate && [_delegate respondsToSelector:@selector(idKeyboard:inputSring:)]) {
   [_delegate idKeyboard:self inputSring:self.inputString];
  }
 }
 
}
 
@end

在controller中使用


//
// ViewController.m
// NYL_IDCardKeyBoard
//
// Created by 聂银龙 on 2017/9/8.
// Copyright © 2017年 聂银龙. All rights reserved.
//
 
#import "ViewController.h"
#import "NYLIDKeyBoard.h"
// 屏幕高度
#define SCREEN_HEIGHT   [[UIScreen mainScreen] bounds].size.height
// 屏幕宽度
#define SCREEN_WIDTH   [[UIScreen mainScreen] bounds].size.width
#define GETSIZE(num) (SCREEN_WIDTH/375*num)
 
@interface ViewController ()<NYKIDKeyBoardDelegate>
 
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property(nonatomic, strong) NYLIDKeyBoard *idKeyBoard;
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
 [super viewDidLoad];
 
 // 设置自定义键盘
 self.textField.inputView = self.idKeyBoard;
 
 
}
 

#pragma mark - 输入代理回调
- (void)idKeyboard:(NYLIDKeyBoard *)idKeyboard inputSring:(NSMutableString *)inputString {
 
 _textField.text = inputString;
 
}
 
 
- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
 [self.textField resignFirstResponder];
}
 
 
// 身份证键盘
- (NYLIDKeyBoard *)idKeyBoard {
 if (!_idKeyBoard) {
  _idKeyBoard = [[NYLIDKeyBoard alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT - GETSIZE(216), SCREEN_WIDTH, GETSIZE(216) )];
  _idKeyBoard.delegate = self;
  
 }
 return _idKeyBoard;
}

- (void)didReceiveMemoryWarning {
 [super didReceiveMemoryWarning];
 // Dispose of any resources that can be recreated.
}
 
 
@end

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: iOS自定义身份证键盘

本文链接: https://lsjlt.com/news/30441.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • iOS自定义身份证键盘
    本文实例为大家分享了iOS自定义身份证键盘的具体代码,供大家参考,具体内容如下 项目中有需要需要身份证的输入框, 用自带的输入切换很麻烦(如果最后一位带X), 所以自定义一个身份证输...
    99+
    2022-05-27
    iOS 身份证键盘
  • element自定义表单验证上传身份证正反面的实现
    大概是这个样式  两个上传组件写在一个form-item里进行自定义表单验证 每次验证,通过判断上传组件绑定的值进行判断,callback不同的提示错误 <temp...
    99+
    2024-04-02
  • Asp.net Core中实现自定义身份认证的示例代码
    Asp.Net Core中虽然集成了许多常用的身份认证,但很多时候,我们还是需要实现自己的身份认证接口,本文这里就简单的介绍下如何实现自定义身份认证接口。 首先写一个简单的接口...
    99+
    2022-06-07
    自定义 ASP.NET net 示例 core ASP
  • Android自定义键盘的实现(数字键盘和字母键盘)
    在项目中,产品对于输入方式会有特殊的要求,需要对输入方式增加特定的限制,这就需要采用自定义键盘。本文主要讲述数字键盘和字母键盘的自定义实现。项目地址:https://github.com/xudjx/djkeyboard键盘效果:自定义键盘...
    99+
    2023-05-30
    android 数字键盘 字母键盘
  • Android自定义输入法软键盘
    本文实例为大家分享了Android自定义输入法软键盘的具体代码,供大家参考,具体内容如下 1 功能描述 触屏设备主界面中有一个文本编辑框,底部区域固定显示一个数字键盘,键盘中除...
    99+
    2024-04-02
  • Android自定义View仿IOS圆盘时间选择器
    通过自定义view实现仿iOS实现滑动两端的点选择时间的效果 效果图 自定义的view代码 public class Ring_Slide2 extends View {...
    99+
    2022-06-06
    选择器 view 选择 IOS Android
  • uniapp表单uni-forms校验自定义校验规则,手机校验、身份证校验
    validateFunction 自定义校验规则 如果需要使用 validateFunction 自定义校验规则,则不能采用 uni-forms 的 rules 属性来配置校验规则,这时候需要通过re...
    99+
    2023-09-04
    javascript 小程序
  • Android自定义View软键盘实现搜索
    1. xml文件中加入自定义 搜索view <com.etoury.etoury.ui.view.IconCenterEditText android:id...
    99+
    2022-06-06
    view Android
  • Android自定义软键盘的步骤记录
    目录效果图实现自定义软键盘1、通过xml定义键盘2、将xml文件与keyboardview绑定起来3、处理点击事件onKey附赠一些实用的效果处理总结效果图 还是咱们的老规矩,先放最...
    99+
    2024-04-02
  • iOS自定义滑杆效果
    本文实例为大家分享了iOS自定义滑杆的具体代码,供大家参考,具体内容如下 先让我们看看效果: 主要实现的代码: UIImage *thumbWithLevel(float aLev...
    99+
    2024-04-02
  • iOS自定义相机功能
    大多数app都会涉及到上传照片这个功能,图片来源无非是从相册获取或者相机拍摄。如果不是特别要求,调用系统已经满足需求。但对于特殊需求,就需要自定义相机拍摄界面了。 对于无需定制的相机...
    99+
    2024-04-02
  • Android上利用gpio keys实现自定义键盘
    1.驱动支撑 gpio keys子系统就是为了实现GPIO+按键实现键盘功能。在一些不支持USB键盘的应用场景非常有用。 实现DTS的修改: ...
    99+
    2022-06-06
    自定义 gpio keys Android
  • Android中怎么自定义一个数字键盘
    这篇文章给大家介绍Android中怎么自定义一个数字键盘,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 实现键盘的 xml 布局网格样式的布局用 GridView 或者 RecyclerView 都可以实现,其实用...
    99+
    2023-05-30
    android
  • Flutter如何自定义应用程序内键盘
    这篇文章主要介绍“Flutter如何自定义应用程序内键盘”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Flutter如何自定义应用程序内键盘”文章能帮助大家解决问题。效果:创建关键小部件Flutte...
    99+
    2023-07-02
  • iOS 10自定义相机功能
    本文实例为大家分享了iOS 10自定义相机功能的具体代码,供大家参考,具体内容如下 直接上代码 // // TGCameraVC.swift // TGPhotoPicker /...
    99+
    2022-05-19
    iOS 10 相机
  • iOS自定义日期选择器
    前言 封装了一个日期选择器,解决两个问题: 1、点击textField,键盘弹出和日期选择器弹出的逻辑处理; 2、同一个界面需要多次用到日期选择器时,判断点击的textField...
    99+
    2022-05-30
    iOS 日期选择器
  • iOS自定义UITabBar中间按钮
    iOS自定义UITabBar中间按钮的具体代码,供大家参考,具体内容如下 自定义YLTbaBar继承自UITabBar git地址 YLTbaBar.h // // YLTab...
    99+
    2022-05-25
    iOS UITabBar 按钮
  • 身份证实名认证API接口有什么意义与作用?
    身份证实名认证API接口有什么意义?   中国公民的身份证是一种对外证明自己身份的有效证件,随着国家对实名制要求的落实,工作与生活中许多场景都会需要进行身份验证。比如出门外出乘座火车与飞机时、注册互联网络平台时、网络游戏与购物时等等,都得用...
    99+
    2023-09-30
    数据库 php 大数据 eclipse mvc
  • flutter聊天界面-自定义表情键盘实现
    flutter聊天界面-自定义表情键盘实现 flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iO...
    99+
    2023-09-05
    flutter flutter聊天界面 自定义表情 聊天界面
  • Android开发之自定义数字键盘的示例
    这篇文章给大家分享的是有关Android开发之自定义数字键盘的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。效果图加载键盘存储键属性的XML描述我们下面的介绍都是依靠上图的实现来展开的,首先是软键盘的布局,我...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作