先看下初步優(yōu)化過的效果
優(yōu)化的幾個方面:
- 校驗(yàn)是否是手機(jī)號
- (BOOL)isValidateMobile:(NSString *)mobile
{
NSString *phoneRegex = @"^[1][3,4,5,8,7][0-9]{9}$";
NSPredicate *phoneTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", phoneRegex];
return [phoneTest evaluateWithObject:mobile];
}
- 校驗(yàn)完成手機(jī)號后光標(biāo)移動到密碼輸入框
3.密碼輸入框密文、長顯示叉號
4.監(jiān)聽三個輸入框冤议,只有全部合法才激活登陸按鈕的點(diǎn)擊方法和顯示方式
部分關(guān)鍵代碼:
注:這里全部使用的是xib拖出來的界面牵咙,使用的是KVC
[_phone addTarget:self action:@selector(changePhone) forControlEvents:UIControlEventEditingChanged];
[_password addTarget:self action:@selector(changeAction) forControlEvents:UIControlEventEditingChanged];
[_email addTarget:self action:@selector(changeAction) forControlEvents:UIControlEventEditingChanged];
[_loginButton setEnabled:NO];
[_loginButton addTarget:self action:@selector(loginButtonAction) forControlEvents:UIControlEventTouchUpInside];
實(shí)現(xiàn)方法:
- 手機(jī)號輸入的監(jiān)聽事件
- (void)changePhone {
if (_phone.text.length >= 11) {
if ([self isValidateMobile:_phone.text]) {
_phone.textColor = [UIColor blackColor];
[_password becomeFirstResponder];
} else {
_phone.textColor = [UIColor redColor];
}
} else {
_phone.textColor = [UIColor blackColor];
}
}
剩余兩個textfield監(jiān)聽事件實(shí)現(xiàn)
- (void)changeAction {
if ((_password.text.length >= 1 && _phone.text.length >= 11 && _email.text.length >= 1) && [self isValidateMobile:_phone.text]) {
// 這里注意一般使用 enable 而不使用userInteractionEnabled 延展中重寫setEnabled方法买鸽,來實(shí)現(xiàn)可否點(diǎn)擊按鈕的效果
[_loginButton setEnabled:YES];
} else {
[_loginButton setEnabled:NO];
}
}
這里還有一句比較關(guān)鍵的代碼描沟,我我使用延展實(shí)現(xiàn)的查剖,因?yàn)檫@樣不需要初始化實(shí)例對象钾虐,可以直接使用系統(tǒng)的方法,只是重寫一下UIButton的一個方法梗搅,來實(shí)現(xiàn)登陸按鈕的不可點(diǎn)擊效果
// .h
#import <UIKit/UIKit.h>
@interface UIButton (enable)
@end
// .m
#import "UIButton+enable.h"
@implementation UIButton (enable)
- (void)setEnabled:(BOOL)enabled {
[super setEnabled:enabled];
if (enabled) {
self.alpha = 1.0;
} else {
self.alpha = 0.5;
}
}
@end
至此已經(jīng)實(shí)現(xiàn)了登陸注冊的基本優(yōu)化禾唁。寫的比較基礎(chǔ),希望大家指正