我有两个文本字段和一个按钮。 我的目标是只有当两个文本字段都包含一些文本时才启用该按钮。
这就是我的所作所为:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
.....
self.btnLogIn.enabled=NO;
}
我以编程方式创建文本字段,这是代码:
UITextField *textField = [[UITextField alloc] init];
......
textField.delegate=self;
[textField addTarget:self action:@selector(textChanged:) forControlEvents:UIControlEventEditingChanged];
这是事件处理程序:
-(void)textChanged:(UITextField *)textField
{
UITextField *txtPassword = (UITextField *)[self.view viewWithTag:102];
UITextField *txtUsername = (UITextField *)[self.view viewWithTag:101];
if([txtPassword.text length]>0 && [txtUsername.text length]>0)
{
self.btnLogIn.enabled=YES;
}
else
{
self.btnLogIn.enabled=NO;
}
}
我提出了三个断点:
当我运行应用程序时,它会点击所有制动点,但按钮仍然处于启用状态。
如果我从设计器中取消选中“已启用”,则会始终禁用它。
我做错了什么?
LE:我拖动了实现文件中的按钮来创建插座,这是代码:
@property (weak, nonatomic) IBOutlet UIButton *btnLogIn;
答案 0 :(得分:1)
确保已创建并连接插座。仅仅在代码中创建插座是不够的,您也需要连接它。当您从XIB拖出连接到代码时,它会为您创建插座并应该连接它,但检查它是否存在。您也可能意外地解除了部分更改或断开了连接。调试以在运行时检查变量不是nil
也是第一个调用端口。
答案 1 :(得分:0)
如果您有出口并且两个文本字段的代理都已设置:
- (BOOL)textField:(UITextField *)textField
shouldChangeCharactersInRange:(NSRange)range
replacementString:(NSString *)string {
NSString *completeText =
[textField.text stringByReplacingCharactersInRange:range
withString:string];
self.button.enabled = completeText.length &&
textField == firstTextField ?
otherTextField.length :
firstTextField.length;
}
答案 2 :(得分:0)
您可以使用以下方法验证文本字段:
if(txtPassword.text >0 && txtUsername.text >0){
// Code here for login process
}
else{
// Code here to inform user nothing has been entered for example a UIAlert
}
或者使用:
if(txtPassword.text == nil && txtUsername.text == nil){
// Code here to inform user nothing has been entered for example a UIAlert
}
else{
// Code here for login process
}
加上而不是:self.btnLogIn.enabled=NO;
您是否可以使用btnLogIn.UserInteractionEnabled = NO;
然后根据需要将其设置回btnLogIn.UserInteractionEnabled = YES;