2

textField1、textField2、textField3、textField4、textField5 など、5 つの数の textFields があります。

私がやりたいことはUITextField、すべての textField にテキストが含まれている場合、キーボードの戻るボタンを [完了] ボタンとして変更することです。私が試してみました、

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if([textField1.text doubleValue]!=0)
        if([textField2.text doubleValue]!=0)
            if([textField3 doubleValue]!=0)
                if([textField4 doubleValue]!=0)
                    if([textField5 doubleValue]!=0)
                    {
                        [textField setReturnKeyType:UIReturnKeyDone];
                    }
                    else
                        [textField setReturnKeyType:UIReturnKeyDefault];
                    else
                        [textField setReturnKeyType:UIReturnKeyDefault];
                    else
                        [textField setReturnKeyType:UIReturnKeyDefault];
                    else
                        [textField setReturnKeyType:UIReturnKeyDefault];
                    else
                        [textField setReturnKeyType:UIReturnKeyDefault];
}

私も入れてみました

- (void)textFieldDidEndEditing:(UITextField *)textField
{
}

どちらも機能していません...誰か助けてください...

4

3 に答える 3

5

textFieldShouldBeginEditing で遊んだほうがいいです。ここでは、すべてのテキストフィールドに null 以外の値が含まれていることを確認してください。

コードは次のようになります

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if([[tf1.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0 && [[tf2.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0 [[tf3.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] > 0) {
        [textField setReturnKeyType:UIReturnKeyDone];
    }
    return TRUE;
}

////編集

このコードを確認しました。それは正常に動作します。これを試してみてください。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    if ([self areAllFieldsNonEmpty]) {
        [textField setReturnKeyType:UIReturnKeyDone];
        [textField reloadInputViews];
    } else {
        [textField setReturnKeyType:UIReturnKeyDefault];
        [textField reloadInputViews];
    }
    return TRUE;
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if ([self areOtherFiledsNonEmptyThan:textField]) {
        if (range.location == 0 && range.length == 0) {
            [textField setReturnKeyType:UIReturnKeyDone];
            [textField reloadInputViews];
        } else if (range.location == 0 && range.length == 1) {
            [textField setReturnKeyType:UIReturnKeyDefault];
            [textField reloadInputViews];
        }
    }
    return TRUE;
}

- (NSInteger)lengthOf:(UITextField *)tf {
    return [[tf.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length];
}

- (BOOL)areOtherFiledsNonEmptyThan:(UITextField *)tf {
    BOOL isEmpty = TRUE;
    for (UITextField *textField in self.view.subviews) {
        if ([textField isKindOfClass:[UITextField class]] && tf != textField) {
            if ([self lengthOf:textField] == 0) {
                isEmpty = FALSE;
                break;
            }
        }
    }
    return isEmpty;
}

- (BOOL)areAllFieldsNonEmpty {
    BOOL isEmpty = TRUE;
    for (UITextField *textField in self.view.subviews) {
        if ([textField isKindOfClass:[UITextField class]]) {
            if ([self lengthOf:textField] == 0) {
                isEmpty = FALSE;
                break;
            }
        }
    }
    return isEmpty;
}
于 2012-09-19T04:52:09.813 に答える
1

これを試して

if([your_textField.text length]>0)

your_textField.returnKeyType = UIReturnKeyDone;
于 2012-09-19T05:15:57.383 に答える
0

次の 2 つの方法で状態を確認する必要があります。

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

だからコードの再利用性のための条件のための関数を作る -

-(void)checkCondition;    

そして、ViewController.mクラスでこれを行います-

-(void)checkCondition
{
    if([txtField1.text length]>0 && [txtField2.text length]>0 && [txtField3.text length]>0 && [txtField4.text length]>0 && [txtField5.text length]>0)
    {
        txtField1.returnKeyType = UIReturnKeyDone;
        txtField2.returnKeyType = UIReturnKeyDone;
        txtField3.returnKeyType = UIReturnKeyDone;
        txtField4.returnKeyType = UIReturnKeyDone;
        txtField5.returnKeyType = UIReturnKeyDone;
    }

    else
    {
        txtField1.returnKeyType = UIReturnKeyDefault;
        txtField2.returnKeyType = UIReturnKeyDefault;
        txtField3.returnKeyType = UIReturnKeyDefault;
        txtField4.returnKeyType = UIReturnKeyDefault;
        txtField5.returnKeyType = UIReturnKeyDefault;
    }

}

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
     [self checkCondition];
     [textField reloadInputViews];
}

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
{
     [self checkCondition];
     [textField reloadInputViews];
}

spaceは としてカウントされることを覚えておいてくださいcharacter。したがって、カウントしたくない場合はspaces、最初にそれらを削除してからtextField.text比較してください。

于 2012-09-19T08:24:53.227 に答える