/CustomKeyboard_iOS

仿工商银行自定义键盘----纯代码布局

Primary LanguageObjective-CApache License 2.0Apache-2.0

CustomKeyboard_iOS

近日项目需求,需要做自定义键盘,因为项目对安全性能要求较高,所以摒弃了系统键盘和一系列的第三方键盘,仿照工商银行app的键盘写了一个自定义键盘的demo,因为之前有很多的前辈留下足迹,所以做起来也不是很费力,在这里要感谢所有知识分享者,我不是巨人,我只是知识的搬运工,言归正传,在本demo里面,键盘布局并没有使用xib和storyboard,纯代码布局,至于因为什么。。。。。。我想你懂得!先来看一下效果图,请自动忽略比较丑的样子,主要看实现思路 想让UITextView弹出自己的键盘而不是系统键盘其实很简单,只需要一句代码即可 self.textView.inputView= keyboard;

剩下的就是自定义键盘view,分几个部分:

IMG_3474

IMG_3475

IMG_3476

1、键盘类型切换按钮布局

//创建三种键盘切换button

  • (void)configKeyboardType

{

NSIntegerbtnTypeCount =3;

CGFloatbtnWidth = (DeviceWidth/2)/btnTypeCount;

CGFloatbtnHeight =20;

NSArray*titles =@[@"数字",@"字母",@"符号"];

for(NSIntegeri =0; i < btnTypeCount; i++)

{

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];

btn.frame=CGRectMake((DeviceWidth/2)+i*btnWidth,5, btnWidth, btnHeight);

[btnsetTitle:titles[i] forState:UIControlStateNormal];

[btnsetTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

[btnsetTitleColor:[UIColor blueColor] forState:UIControlStateSelected];

btn.tag= (CustomKeyboardType)i+1;

if(i ==1)

{

//默认字母键盘

btn.selected=YES;

}

[btnaddTarget:self action:@selector(typeBtnClicked:) forControlEvents:UIControlEventTouchUpInside];

[selfaddSubview:btn];

}

}

//点击切换键盘

  • (void)typeBtnClicked:(UIButton*)sender

{

if(sender.selected)

{

return;

}

UIButton *btn_num = [self viewWithTag:CustomKeyboardType_Num];

UIButton *btn_let = [self viewWithTag:CustomKeyboardType_Letters];

UIButton *btn_sym = [self viewWithTag:CustomKeyboardType_Symbol];

sender.selected=YES;

if(sender == btn_num)

{

btn_let.selected=NO;

btn_sym.selected=NO;

[self clickNumTypeBtn];

}

if(sender == btn_let)

{

btn_num.selected=NO;

btn_sym.selected=NO;

[self clickLetterTypeBtn];

}

if(sender == btn_sym)

{

btn_num.selected=NO;

btn_let.selected=NO;

[self clickSymbleTypeBtn];

}

}

2、三种键盘布局,也是采用的自定义view来封装

[self configNumKeyBoard];

[self configLetterKeyboard];

[self configSymbolKeyboard];

三种键盘全部继承一个基类PwKeyboardBaseView,里面包含了点击普通按键、删除按键、确认按键的block回调

@property(nonatomic,copy)void(^btnClickedCallback)(UIButton*btn);

@property(nonatomic,copy)void(^deleteBtnClickedCallback)(void);

@property(nonatomic,copy)void(^returnBtnClickedCallback)(void);

其中数字键盘做了乱序,只需要将装载所有数字的数组做乱序即可

_allNums = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"0"];

_allNums = [_allNums sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {

intseed =arc4random_uniform(2);

if(seed) {

return[obj1compare:obj2];

}else{

return[obj2compare:obj1];

}

}];

3、自由配置键盘 通过属性配置仅支持单一键盘

/** 允许空格 默认不允许输入空格 */

@property (nonatomic, assign) BOOL allowSpace;

/** 不允许点击按键时,有变化颜色 默认点击按钮时会产生阴影 */

@property (nonatomic, assign) BOOL forbidClickedShow;

/** 数字键盘是否每次使用都随机排布 默认固定数字键盘 */

@property (nonatomic, assign) BOOL allowRandomLayout;

/** 仅支持特定键盘 字母 字符 数字 */

@property (nonatomic, assign) PWKeyboardType onlyKeyboardType;

/** 禁止某个键盘方式 */

@property (nonatomic, assign) PWKeyboardType forbidKeyBoardType;

思路就是将所有的数字、字母、符号全装在一个数组之中,再按行来拆分成若干数组,作为按钮标题

代码比较简单,也不再多介绍