Iphone 禁用的UIButton取决于4个UITextFields

Iphone 禁用的UIButton取决于4个UITextFields,iphone,xcode,ios,Iphone,Xcode,Ios,我有4个UIExtFields,我使用它们来保持2个UIButtons处于禁用状态,直到所有4个字段都输入了数据。到目前为止,我有以下代码 - (void)textFieldDidBeginEditing:(UITextField *)textField { if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) &&

我有4个UIExtFields,我使用它们来保持2个UIButtons处于禁用状态,直到所有4个字段都输入了数据。到目前为止,我有以下代码

- (void)textFieldDidBeginEditing:(UITextField *)textField {


if (([brand.text length] >0) && ([qty.text length] >0) && ([size.text length] >0) && ([price.text length] >0)) {
    [calcOneButton setEnabled:YES];
    [calcTwoButton setEnabled:YES];

}else {

}


}
我对此有很多问题:-

  • 从字段中删除数据后,UI按钮仍处于启用状态
  • 按钮未正确启用,在我将数据输入所有4个字段后,我需要重新点击一个字段以启用按钮
  • 我正在记录每个字段的长度,但当输入字符时,它从0开始计数,而不是1
  • 有人能帮我解决这些问题吗

    记录字段长度的代码如下所示:-

    #define MAXLENGTH 5
    #define MAXQTY 3
    #define MAXSIZE 4
    #define MAXBRAND 10
    
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
    if (textField == brand) {
        int lengtha = [brand.text length] ;
        NSLog(@"lenghta = %d",lengtha);
        if (lengtha >= MAXBRAND && ![string isEqualToString:@""]) {
            brand.text = [brand.text substringToIndex:MAXBRAND];
            return NO;
        }
    

    所有4个字段都采用相同的格式,但当我输入一个字符时,NSlog结果为0,然后第二个字符为1,依此类推。

    只需使用另一个委托方法即可

    或者使用:
    textfielddidediting:
    就像Krypton在评论中告诉你的那样

    或者使用
    textField:shouldChangeCharactersRange:replacementString:
    在键入时直接启用/禁用

    textField:(UITextField*)aTextField shouldChangeCharactersInRange:(NSRange) aRange replacementString:(NSString*)aRepString
    {
        NSString *newStr = [aTextField.text stringByReplacingCharactersInRange:aRange withString:aRepString];
        if([newStr length]>0 && /*otherStringLength > 0*/)
              //enable
        else
              //disable
        return YES;
     }
    

    但我认为最常用的方法是使用
    didEndEditing
    -方法

    您是否设置了textfield didEndEditing:因为这将帮助您结合上面发布的方法。如果要记录每个字段的长度,可能是更新后一帧,还是1个字符总是记录为0?如果是这样,您可以在返回长度时暂时覆盖它。@Krypton记录字段长度的代码如下
    #定义MAXLENGTH 5#定义MAXQTY 3#定义MAXSIZE 4#定义MAXBRAND 10-(BOOL)textField:(UITextField*)textField应更改CharactersRange:(NSRange)range replacementString:(NSString*)string{If(textField==brand){int lengtha=[brand.text length];NSLog(@“lenghta=%d”,lengtha);if(lengtha>=MAXBRAND&![string isEqualToString:@”“]){brand.text=[brand.text substringToIndex:MAXBRAND];返回NO;}
    你能把它复制出来并粘贴到你的问题中作为编辑吗?用零格式很难看到。@Krypton我在上面添加了代码,如果(([brand.text length]=0)| |([qty.text length]=0)| |([size.text length]=0)| |([price.text length]=0))看起来不错,我假设我将需要使用OR而不是,您只需考虑
    shouldchangeCharactersRange:
    在文本字段中进行更改之前被调用。
    length1>0&&length2>0&&……=>启用
    length1==0 | | | length2==0 | |禁用
    现在是我的问题是,在最后一个文本字段输入数据后,我点击其中一个按钮,我注意到
    didEndEditing
    没有被调用,我怎么能让它每次都调用?我想didEndEditing没有被调用,因为第一响应者没有辞职。或者我会在键盘打开时禁用按钮(返回后,您可以辞去第一响应者的职务)和
    didEndEditing:
    将被调用,或者您强制用户返回,因为按钮被键盘隐藏,或者在
    shouldChangeCharactersInRange
    中执行启用/禁用操作。最后一种方法可以在键入时启用/禁用按钮。希望对您有所帮助。。。