0

我有两个文本字段和一个按钮。我的目标是仅当两个文本字段都包含一些文本时才启用该按钮。

这就是我所做的:

- (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;
    }
}

我设置了三个断点:

  • self.btnLogIn.enabled=否;(在 viewDidLoad 中)
  • self.btnLogIn.enabled=YES;(在 textChanged 中)
  • self.btnLogIn.enabled=否;(在 textChanged 中)

当我运行该应用程序时,它会达到所有制动点,但该按钮仍处于启用状态。

如果我从设计器中取消选中启用,它总是被禁用。

我究竟做错了什么?

LE:我在实现文件中拖动按钮来创建插座,代码如下:

@property (weak, nonatomic) IBOutlet UIButton *btnLogIn;
4

3 回答 3

1

确保插座已创建并已连接。仅在代码中创建插座是不够的,您还需要连接它。当您将连接从 XIB 拖出到代码时,它会为您创建插座并应该连接它,但请检查它是否连接。您也可能不小心撤消了部分更改或断开了连接。调试以检查变量是否不在nil运行时也是第一个调用端口。

于 2013-08-04T13:50:44.763 回答
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;

}
于 2013-08-04T13:42:46.130 回答
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;

于 2013-08-04T21:59:42.780 回答