自定義數字鍵盤

上週公司項目 要求做支付充值 彈出的數字鍵盤 可以跟支付寶一樣,系統自帶的外觀不好看,要想做到像支付寶那樣,想了想也就自己自定義做了。

做完後發現也不難。

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;
    }

這樣自定義的數字鍵盤就做好了

發佈了46 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章