摘要:首先想到輸入框就避不開,所以我們的思路從開始發散。首先需要創建一個密碼輸入框,目的是可以彈起鍵盤,并且輸入內容。
現在的 app 大部分會接入三方支付,同時也有一些 app 會選擇一種充值模式,讓用戶把自己的資金存入 app 內,這樣在用戶需要在 app 中購買商品時,就能夠用自己的錢包進行支付,在這里就會涉及到支付密碼彈窗的實現,下面說一下對一個簡單的密碼支付彈窗實現過程。
首先想到輸入框就避不開 UITextfield,所以我們的思路從 UITextfield 開始發散。
首先需要創建一個密碼輸入框,目的是可以彈起鍵盤,并且輸入內容。
如果以 UItextfield 為基礎,將輸入內容設置為密文輸入顯示的話,展示出來的效果是會把內容擠在一起,所以需要監聽輸入框的輸入內容,然后通過輸入的內容進行相應判斷,然后我們繪制好對應的小黑點,將其在"輸入框"中顯示。同時除了小黑點之外,我們還需要繪制對應的線框。
創建"密碼輸入框"UIView *inputView = [[UIView alloc]init]; inputView.backgroundColor = White_Color; inputView.layer.borderWidth = 1; inputView.layer.borderColor = UIColorFromRGB(0xb2b2b2).CGColor; [self.alertWhiteView addSubview:inputView]; [inputView mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.moneyLabel.mas_bottom).offset(19); make.centerX.equalTo(self.alertWhiteView); make.width.offset(squreWidth*6); make.height.offset(squreWidth); make.bottom.offset(-19); }];繪制小黑點以及分割線
for (int i = 1; i<7; i++) {
// 黑色點
UIView *spotView = [[UIView alloc]initWithFrame:CGRectMake((i-1)*squreWidth+(squreWidth-dotWidth)/2, (squreWidth-dotWidth)/2, dotWidth, dotWidth)];
spotView.backgroundColor = UIColorFromRGB(0x262122);
// 切圓
spotView.clipsToBounds = YES;
spotView.layer.cornerRadius = dotWidth/2;
// 隱藏,輸入時再顯示
spotView.hidden = YES;
[inputView addSubview:spotView];
// 把小黑點按照順序依次加入數組中
[_dotArray addObject:spotView];
if (i!=6) {
// 分割線
UIView *lineView = [[UIView alloc]initWithFrame:CGRectMake(i*squreWidth, 0, 1, squreWidth)];
lineView.backgroundColor = UIColorFromRGB(0xb2b2b2);
[inputView addSubview:lineView];
}
}
添加 UITextfield
// 密碼輸入框 [self.passWordTextField mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.moneyLabel.mas_bottom).offset(19); make.centerX.equalTo(self.alertWhiteView); make.width.offset(squreWidth*6); make.height.offset(squreWidth); make.bottom.offset(-19); }];
懶加載方式:
// 懶加載方式
- (UITextField *)passWordTextField{
if (!_passWordTextField) {
_passWordTextField = [[UITextField alloc]init];
// 設置為純數字鍵盤
_passWordTextField.keyboardType = UIKeyboardTypeNumberPad;
[self.alertWhiteView addSubview:_passWordTextField];
// 默認隱藏
_passWordTextField.hidden = YES;
// 添加輸入監聽
[_passWordTextField addTarget:self action:@selector(textFieldDidChange:)forControlEvents:UIControlEventEditingChanged];
}
return _passWordTextField;
}
監聽鍵盤輸入內容
// 鍵盤內容監聽
- (void)textFieldDidChange:(UITextField *)textField{
if (textField.text.length == 6) {
// [MBProgressHUD showError:@"密碼錯誤,請重新嘗試"];
if (self.completeBlock) {
self.completeBlock(textField.text);
[textField resignFirstResponder];
textField.text = @"";
}
}
if (textField.text.length == 7) {
textField.text = [textField.text substringToIndex:1];
for (int j = 0; j<_dotArray.count; j++) {
UIView *view = _dotArray[j];
view.hidden = YES;
}
}
if (textField.text.length>0&&textField.text.length<7) {
for (int j = 0; j<_dotArray.count; j++) {
UIView *view = _dotArray[j];
if (jelse{
view.hidden = YES;
}
}
}else{
for (int j = 0; j<_dotArray.count; j++) {
UIView *view = _dotArray[j];
view.hidden = YES;
}
}
}
這里面比較關鍵的地方是:
自己繪制小黑點代替 passWordTextField 的內容,并添加到自定義的"密碼輸入框"中
當彈出密碼輸入框時,讓 passWordTextField 變成第一響應者,彈起鍵盤
通過鍵盤的監聽事件,內容進行相應判斷,以及取出對應數量的小黑點來進行輸入的展示
其他在這里省略了很多步驟,只拿最關鍵的過程來描述,比如其他相關視圖的創建,彈起的相關邏輯,以及輸入完畢的回調處理,在這里就不一一贅述了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7073.html
摘要:前言見解有限,如有描述不當之處,請幫忙指出,如有錯誤,會及時修正。為什么要梳理這篇文章最近恰好被問到這方面的問題,嘗試整理后發現,這道題的覆蓋面可以非常廣,很適合作為一道承載知識體系的題目。 前言 見解有限,如有描述不當之處,請幫忙指出,如有錯誤,會及時修正。 為什么要梳理這篇文章? 最近恰好被問到這方面的問題,嘗試整理后發現,這道題的覆蓋面可以非常廣,很適合作為一道承載知識體系的題目...
摘要:通用頭部這也是開發人員見過的最多的信息,包括如下請求的服務器地址請求方式請求的返回狀態碼,如代表成功請求的遠程服務器地址會轉為譬如,在跨域拒絕時,可能是為,狀態碼為等當然,實際上可能的組合有很多。 面試中經常會被問到這個問題吧,唉,我最開始被問到的時候也就能大概說一些流程。被問得多了,自己就想去找找這個問題的全面回答,于是乎搜了很多資料和網上的文章,根據那些文章寫一個總結。 寫得不好...
摘要:通用頭部這也是開發人員見過的最多的信息,包括如下請求的服務器地址請求方式請求的返回狀態碼,如代表成功請求的遠程服務器地址會轉為譬如,在跨域拒絕時,可能是為,狀態碼為等當然,實際上可能的組合有很多。 面試中經常會被問到這個問題吧,唉,我最開始被問到的時候也就能大概說一些流程。被問得多了,自己就想去找找這個問題的全面回答,于是乎搜了很多資料和網上的文章,根據那些文章寫一個總結。 寫得不好...
摘要:通用頭部這也是開發人員見過的最多的信息,包括如下請求的服務器地址請求方式請求的返回狀態碼,如代表成功請求的遠程服務器地址會轉為譬如,在跨域拒絕時,可能是為,狀態碼為等當然,實際上可能的組合有很多。 面試中經常會被問到這個問題吧,唉,我最開始被問到的時候也就能大概說一些流程。被問得多了,自己就想去找找這個問題的全面回答,于是乎搜了很多資料和網上的文章,根據那些文章寫一個總結。 寫得不好...
閱讀 727·2023-04-25 19:43
閱讀 3971·2021-11-30 14:52
閱讀 3796·2021-11-30 14:52
閱讀 3861·2021-11-29 11:00
閱讀 3791·2021-11-29 11:00
閱讀 3887·2021-11-29 11:00
閱讀 3568·2021-11-29 11:00
閱讀 6142·2021-11-29 11:00