上週公司項目 要求做支付充值 彈出的數字鍵盤 可以跟支付寶一樣,系統自帶的外觀不好看,要想做到像支付寶那樣,想了想也就自己自定義做了。
做完後發現也不難。
UITextField 有一個inputView的屬性 這個屬性 就是彈出鍵盤的View,將自定義的鍵盤的View賦值給inputView 實現了 彈出自定義鍵盤。
實現的步驟如下:
用一個UIView 搭建鍵盤 UI
// CZKeyBoardView.h
//
// Created by location on 16/9/20.
#import <UIKit/UIKit.h>
@class CZKeyBoardView;
typedef enum {
CZKeyBoardBtnTypeHid = 11,//隱藏鍵盤
CZKeyBoardBtnTypeDelete = 12,//刪除
CZKeyBoardBtnTypeSure = 13//確定
}CZKeyBoardBtnType;
@protocol CZKeyBoardViewDelegate <NSObject>
- (void)keyBoardView:(CZKeyBoardView *)keyBoardView didClickSureBtn:(UIButton *)btn;
@end
@interface CZKeyBoardView : UIView
@property (nonatomic,strong) UITextField *textF;
+ (instancetype)shareKeyBoard;
@property (nonatomic,weak) id<CZKeyBoardViewDelegate>delegate;
界面實現比較簡單,在點m文件中,記得聲明一個UITextField的屬性
@property (nonatomic, weak) UITextField<UITextInput> *textInput;
監聽通知 UITextFieldTextDidBeginEditingNotification 實現該通知的方法
- (void)inputTextAction:(NSNotification *)notifacation
{
self.textInput = notifacation.object;
}
該通知實現 我的理解是 替換系統的輸入 換成自定義的輸入
接下來就是實現相應的輸入文本 添加 ,刪除 ,確定
通過查看UITextInput 的協議文件 我們發現 它有如下幾個屬性
通過了解得知,
- (void)insertText:(NSString *)text;
是將文本不斷添加插入
- (void)deleteBackward;
是將文本從後往前按照長度爲1刪除
所以實現相應點擊按鈕的點擊事件
點擊數字實現文本添加:點擊刪除實現文本刪除
代碼如下:
if (btn.titleLabel.text.length == 1) {
[self.textInput insertText:btn.titleLabel.text];
}
switch (btn.tag) {
case CZKeyBoardBtnTypeHid:
[self.textInput endEditing:YES];
break;
case CZKeyBoardBtnTypeDelete:
[self.textInput deleteBackward];
break;
case CZKeyBoardBtnTypeSure:
if ([self.delegate respondsToSelector:@selector(keyBoardView:didClickSureBtn:)]) {
[self.delegate keyBoardView:self didClickSureBtn:btn];
}
[self.textInput endEditing:YES];
break;
default:
break;
}
這樣自定義的數字鍵盤就做好了