糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【仿去哪儿登录】UITextField输入时检查输入框是否为空

【仿去哪儿登录】UITextField输入时检查输入框是否为空

时间:2020-09-10 05:59:53

相关推荐

【仿去哪儿登录】UITextField输入时检查输入框是否为空

APP登录时,一般是是等用户输入完账号和密码后才去检查是否为空,而去哪儿登录时,在账号和密码的输入过程中,只要当账号和密码其一为空时,登录按钮立即变成不可用(图1),只有账号和密码均符合要求时,登录按钮才可用(图2)。本文就是来实现这一功能:当登录所需的UITextFiled均不空时登录按钮才有效。

图1-去哪儿APP登录按钮不可用状态

图2-去哪儿APP登录按钮可用状态

要实现这一功能,首先想到的是使用UITextFiledDelegate,要实现哪个方法呢?只要一个方法:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

这个方式是在用户将要输入或者删除字符,即Text将要发生改变时,就会被调用,官方的描述为:

Asks the delegate if the specified text should be changed.The text field calls this method whenever the user types a new character in the text field or deletes an existing character.

注意这里强调了“将要”,所以不能直接在这个方法内根据UITextField的Text的长度来判断输入框是否为空,因为当输入框为空时,此时用户输入一个字符,UITextField.text.length 还是等于0,当用户再输入一个字符,UITextField.text.length的值才会是1(而此时用户看到的输入字符串长度应该是2),原因是这个前面提到的“将要”,shouldChangeCharactersInRange函数是在用户的输入输入到UITextField之前调用的,所以总是“慢半拍”,好了,朋友喊去打球,就不废话了,直接上示例代码。

先是ViewController.h声明了三个输入框用来输入姓名、电话、车牌和一个确定按钮,并实现UITextFiledDelegate代理

@interface MakeOrderViewController : BaseViewController<UITextFieldDelegate>@property (weak,nonatomic) IBOutlet UIView *textView;@property (weak,nonatomic) IBOutlet UITextField *nameText;@property (weak,nonatomic) IBOutlet UITextField *phoneText;@property (weak, nonatomic) IBOutlet UITextField *carText;@property (weak,nonatomic) IBOutlet UIButton *OkBtn;@end

然后是ViewController.m文件

@interface MakeOrderViewController ()@end@implementation MakeOrderViewController- (void)viewDidLoad {[super viewDidLoad];self.nameText.delegate = self;self.carText.delegate = self;self.phoneText.delegate = self;self.OkBtn.enabled = NO;self.OkBtn.alpha = 0.5;}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.}- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{BOOL isOK = YES;//记录用户输入是否合法if (textField!=self.nameText&&self.nameText.text.length==0) {isOK = false;}else if(textField!=self.phoneText&&self.phoneText.text.length==0){isOK = false;}else if(textField!=self.carText&&self.carText.text.length==0){isOK = false;}else if(range.location == 0&&[string isEqualToString:@""]){isOK = false;}if (isOK) {self.OkBtn.alpha = 1;self.OkBtn.enabled = YES;}else{self.OkBtn.alpha = 0.5;self.OkBtn.enabled = NO;}return YES;}@end

有必要解释下shouldChangeCharactersInRange函数的几个参数

textField 就是当前编辑的UITextFiledrange 是一个结构体,包含用户刚刚输入的字符位置(location)和长度(length)

string 就是用户刚刚输入的字符,如果用户刚刚是按了delete键,string为空

上面的函数的前三个判断,是判断非编辑状态下的输入框(就是没有获得焦点的那两个输入框)的内容是否为空, 最后一个判断range.location == 0&&[string isEqualToString:@""],是为了判断在当前输入框中是否是用户输入字符后点击delete键将某个UITextFiled的字符全部删除的操作,是的话要将按钮设置为不可点击。

效果:

如果觉得《【仿去哪儿登录】UITextField输入时检查输入框是否为空》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。