仿微信輸入支付密碼的彈窗

? 微信輸入支付密碼的彈窗效果相信大家都見過吧秕狰,先描述下它的特點(這里先不做微信支付的時候選擇支付方式這一塊):

? 1.模態(tài)顯示,背景灰色许赃,點擊背景彈窗消失扒袖。

? 2.提供輸入的密碼框是看不到光標的,在文本框上長按的時候是可以看到放大鏡歼培,但是禁止賦值粘貼等操作震蒋。

? 3.輸入密碼的文本框是有分隔線的,而且會用黑色的圓點來替代輸入的字符躲庄。

? 4.密碼為6位數字查剖,當用戶輸入夠6位數字之后彈窗自動消失,然后判斷密碼正確性噪窘,就相當于點擊了確認按鈕笋庄。


下面講具體實現(xiàn):

1.首先,這里用到了一個第三方庫的WTReTextField,這個類是UITextField的一個子類直砂,可以通過設置它的pattern來限制文本框填充內容的格式菌仁,比如我們可以設置它可以輸入像xxx xxxx xxxx這樣格式的手機號碼。在這里静暂,我們限制它填充的內容為6為數字济丘,不能輸入其他非法字符。

2.我們定義一個YLPasswordTextFiled繼承自WTReTextField洽蛀。在這個類里面闪盔,重寫了-(void)setFrame:(CGRect)frame方法,在這里面用UILabel控件來作為占位符(即在輸入數字的時候顯示的黑色圓點)剛開始這些占位符是隱藏的辱士,當輸入內容后顯示,用戶輸入多少個字符就對應顯示多少個黑點:

-(void)setFrame:(CGRect)frame

{

[super setFrame:frame];

CGFloatperWidth = (frame.size.width-kPasswordLength+1)*1.0/kPasswordLength;

for(NSIntegeri=0;i<kPasswordLength;i++){

if(i<kPasswordLength-1){

UILabel*vLine = (UILabel*)[self viewWithTag:kLineTag+ i];

if(!vLine){

vLine = [[UILabel alloc]init];

vLine.tag=kLineTag+ i;

[self addSubview:vLine];

}

vLine.frame=CGRectMake(perWidth + (perWidth +1)*i,0,1, frame.size.height);

vLine.backgroundColor= [UIColor grayColor];

}

UILabel*dotLabel = (UILabel*)[self viewWithTag:kDotTag+ i];

if(!dotLabel){

dotLabel = [[UILabel alloc]init];

dotLabel.tag=kDotTag+ i;

[self addSubview:dotLabel];

}

dotLabel.frame=CGRectMake((perWidth +1)*i + (perWidth -10)*0.5, (frame.size.height-10)*0.5,10,10);

dotLabel.layer.masksToBounds=YES;

dotLabel.layer.cornerRadius=5;

dotLabel.backgroundColor= [UIColorblackColor];

dotLabel.hidden=YES;

}

}

為了防止用戶賦值粘帖听绳,重寫了-(BOOL)canPerformAction:(SEL)action withSender:(id)sender:

//禁止復制粘帖

-(BOOL)canPerformAction:(SEL)action withSender:(id)sender{

UIMenuController *menuController = [UIMenuController sharedMenuController];

if(menuController){

menuController.menuVisible=NO;

}

return NO;

}


這樣就基本完成了供輸入密碼的文本框的構造颂碘。


3.定義一個LMPopInputPasswordView繼承自UIView,這個是彈出視圖,并定義一個LMPopInputPassViewDelegate委托和委托方法-(void)buttonClickedAtIndex:(NSUInteger)index withText:(NSString*)text;來傳遞用戶輸入的內容椅挣。


4.通過設置_textFiled.tintColor= [UIColorclearColor];//看不到光標

_textFiled.textColor= [UIColorclearColor];//看不到輸入內容

來讓用戶看不到文本框的輸入內容以及光標头岔。


5.通過[_textFiledaddTarget:selfaction:@selector(textFiledEdingChanged)forControlEvents:UIControlEventEditingChanged];為文本框綁定事件,并通過以下方法來控制幾個黑點的顯示和隱藏鼠证,并且在輸入密碼長度等于6的時候調用點擊確定按鈕事件對應的方法:

-(void)textFiledEdingChanged

{

NSIntegerlength =_textFiled.text.length;

NSLog(@"lenght=%li",(long)length);

if(length==kPasswordLength){

[self buttonClickedAction:_ensureButton];

}

for(NSIntegeri=0;i

UILabel*dotLabel = (UILabel*)[_textFiled viewWithTag:kDotTag+ i];

if(dotLabel){

dotLabel.hidden= length <= i;

}

}

}


6.最后再為LMPopInputPasswordView添加動畫彈出和動畫消失的轉場動畫:

#pragma mark ---animation methods

-(void)fadeIn

{

self.transform=CGAffineTransformMakeScale(1.3,1.3);

self.alpha=0;

[UIView animateWithDuration:.35animations:^{

self.alpha=1;

self.transform=CGAffineTransformMakeScale(1,1);

}completion:^(BOOLfinished) {

[_textFiled becomeFirstResponder];

}];

}

- (void)fadeOut

{

[self endEditing:YES];

[UIView animateWithDuration:.35animations:^{

self.transform=CGAffineTransformMakeScale(1.3,1.3);

self.alpha=0.0;

}completion:^(BOOLfinished) {

if(finished) {

[_overlayView removeFromSuperview];

[self removeFromSuperview];

}

}];

}

- (void)pop

{

UIWindow*keywindow = [[UIApplication sharedApplication]keyWindow];

[keywindow addSubview:_overlayView];

[keywindow addSubview:self];

self.center=CGPointMake(keywindow.bounds.size.width/2.0f,

keywindow.bounds.size.height/2.0f-100);

[self fadeIn];

}

- (void)dismiss

{

[self fadeOut];

}

7.最后在點擊按鈕的時候調用委托方法峡竣,傳遞用戶輸入的密碼,然后彈窗消失:

-(void)buttonClickedAction:(UIButton*)sender

{

//傳值給委托對象

if([_delegaterespondsToSelector:@selector(buttonClickedAtIndex:withText:)]){

[_delegate buttonClickedAtIndex:sender.tag withText:_textFiled.text];

}

[selfdismiss];

}



最后附上demo地址:DemoInPutPasswordView 仿微信支付密碼輸入框


效果圖如下:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末量九,一起剝皮案震驚了整個濱河市适掰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荠列,老刑警劉巖类浪,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異肌似,居然都是意外死亡费就,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門川队,熙熙樓的掌柜王于貴愁眉苦臉地迎上來力细,“玉大人,你說我怎么就攤上這事固额∶呗欤” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵对雪,是天一觀的道長河狐。 經常有香客問我,道長,這世上最難降的妖魔是什么馋艺? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任栅干,我火速辦了婚禮,結果婚禮上捐祠,老公的妹妹穿的比我還像新娘碱鳞。我一直安慰自己,他們只是感情好踱蛀,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布窿给。 她就那樣靜靜地躺著,像睡著了一般率拒。 火紅的嫁衣襯著肌膚如雪崩泡。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天猬膨,我揣著相機與錄音角撞,去河邊找鬼。 笑死勃痴,一個胖子當著我的面吹牛谒所,可吹牛的內容都是我干的。 我是一名探鬼主播沛申,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼劣领,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铁材?” 一聲冷哼從身側響起尖淘,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎著觉,沒想到半個月后德澈,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡固惯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年梆造,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葬毫。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡镇辉,死狀恐怖,靈堂內的尸體忽然破棺而出贴捡,到底是詐尸還是另有隱情忽肛,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布烂斋,位于F島的核電站屹逛,受9級特大地震影響础废,放射性物質發(fā)生泄漏。R本人自食惡果不足惜罕模,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一评腺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧淑掌,春花似錦蒿讥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至担敌,卻和暖如春摔敛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背全封。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工舷夺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人售貌。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像疫萤,于是被迫代替她去往敵國和親颂跨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容