自定義支付密碼輸入view、密碼鍵盤並自動檢測6位密碼輸入完全

XDChang發表於2018-07-10

程式碼很簡單,利用textField自定義6位支付密碼輸入框,數字鍵盤利用button自定義,加兩個協議方法,用來傳值以及處理鍵盤響應事件。

1.png

customkeyboard.gif
這是專案中遇到的一個小功能,封裝的不是很好,主講自定義思路,如果你剛好也需要這種功能,建議將此demo作為參考,自己重新編寫。


17年8月換了工作地點,從武漢轉到了南京。新的工作環境,新的同事,新的氛圍,在團隊中的職能擔當也變了。之前是小公司職位更突出,現在是大公司,我成為了團隊中的一個小成員。(這種變動,情緒上難免會有些波動)我是一個新人,工作時間也不是很長,技術積累的也沒有那麼多。唯一能幫我改變現狀的只有我自己,我會靜下心來好好成長。

值得高興地是,我在武漢工作那段時間,利用工作間隙學習的js,swift,h5網頁互動,現如今派上了用場。我很高興能為團隊中其他成員解決問題,這應該就是我的價值所在吧,我會繼續努力的!


####本文於2017.12.31下午再次編輯,更新優化,自動識別6位密碼輸入。

setPayPsd.gif

####實現思路 既要記錄文字的輸入又要隨著delete實時減少文字。如果僅僅只是實現 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string這個協議方法,是不能做到同時處理這兩件事的。(既加又減,想想就矛盾)所以需要兩個獨立的方法去處理這兩件事。 ####主要程式碼 1.處理輸入邏輯:

/*!
 @method  密碼輸入時觸發的協議方法
 @abstract 密碼輸入時觸發的協議方法,遍歷tf 進行賦值
 @discussion 注意點,delete事件也會進入這個方法 但string是nil 所以會給要賦值的tf 置為nil, 符合delete邏輯。
 @param textField textField
 @result bool
 */
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    
    self.tipsLabel.text = @"請設定支付密碼";
    for (UITextField *tf in self.tfArr) {
        if ([tf.text isEqualToString:@""]||tf.text == nil) {
            tf.text = string;
            if (textField.text.length==5) {
                [self textFieldShouldReturn:textField];
            }
            return YES;
        }
    }
    return YES;
}
複製程式碼

2.處理刪除邏輯:

/*!
 @method  payPasswordTFDeleteEvent
 @abstract 鍵盤delete觸發的協議方法
 @discussion 自定義的協議方法,鍵盤delete觸發的協議方法。
 
 */
- (void)payPasswordTFDeleteEvent{
    
    [self.tfArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UITextField *tf = (UITextField *)obj;
        if (![tf.text isEqualToString:@""] && tf.text !=nil) {
            tf.text = @"";
            *stop = YES;
        }
    }];
}
複製程式碼

協議方法是自定義textField實現deleteBackward協議方法,監控鍵盤delete的點選。 ####注意:

如果專案中使用了IQKeyboardManager請實現下面的方法,避免使用過程中出現問題:

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    [self.tfArr enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        UITextField *tf = (UITextField *)obj;
        tf.text = @"";
    }];
}
複製程式碼

CustomSectetTFAndKeyBoard

轉載請註明出處 © XDChang

相關文章