0

私は4つのテキストフィールドのセットを持っています。以下のコードで簡単に理解できるように、これらのテキストフィールドに特定の制限を適用しました。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString * newString = [textField.text stringByReplacingCharactersInRange:range withString:string];

    if (string.length==0) {
        return YES;
    }


    if (textField == txt_mins) {
        return [[AppDelegate sharedInstance] setNumberFormat:textField newString:newString
        IntegerLimit:5 FractionLimit:2 NumberType:2];
    }
    else if (textField == txt_units){
        return [[AppDelegate sharedInstance] setNumberFormat:textField newString:newString 
        IntegerLimit:5 FractionLimit:2 NumberType:2];
    }
    // Below logic is for All 4 Modifer Textfields
    // we are restricting the user to enter only max 2 characters in modifier textfields and
     also automatically
    // converting each entered character to the uppercase string.
    if (textField==txt_modifier1 || textField==txt_modifier2 || textField==txt_modifier3 ||
     textField==txt_modifier4) {
        // This condition is restricting the user from entering the special characters in the
        modifier textfield.
        if ([string rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] 
        invertedSet]].location != NSNotFound) {
            // There are non-alphanumeric characters in the replacement string
            return NO;
        }
        else{
        NSString *result = [textField.text stringByReplacingCharactersInRange:range 
        withString:string.uppercaseString];
        if (result.length <= 2)
            textField.text = result;
        return NO;
       }
    }
    return YES;
}

私が実際に欲しいのは、txt_modifier1. テキスト フィールドに 2 文字を入力するとすぐに、次のテキスト フィールドである txt_modifier2 にフォーカスが移ります。他の修飾子テキスト フィールドも同様です。これらの制限は shouldChangeCharactersInRange: メソッドで行いました。私のコードでこの機能強化を処理する方法を提案してください。

4

2 に答える 2

3
@property UIView *firstResponder;

- (void) toggleTextfield 
{
    NSInteger nextTag = self.firstResponder.tag;
    nextTag += 1;
    UITextField *nextTextField = (UITextField *)[self.view viewWithTag:nextTag];  
    if (nextTextField)  
    {  
        [nextTextField becomeFirstResponder];  
    }  
}  

必要に応じて、すべてのテキストフィールドにタグ値を割り当てます。
フォーカスを移動したいときにこのメソッドを呼び出します。

この行を追加しますtextFieldDidBeginEditing:

self.firstResponder = textField;

Replace this code 
if (result.length <= 2)
  textField.text = result  
return NO; 

with 

 if (result.length <= 2) 
        textField.text = result; 
    else [self toggleTextfield]; 

and add this function - 

(void)textFieldDidBeginEditienter code hereng:(UITextField *)textField   
{  
     self.firstResponder = textField;   
}
于 2013-06-17T08:04:09.450 に答える
0
if (textField==txt_modifier1)
{
 // This condition is restricting the user from entering the special characters in the
    modifier textfield.
    if ([string rangeOfCharacterFromSet:[[NSCharacterSet alphanumericCharacterSet] 
    invertedSet]].location != NSNotFound) {
        // There are non-alphanumeric characters in the replacement string
        return NO;
    }
    else{
    NSString *result = [textField.text stringByReplacingCharactersInRange:range 
    withString:string.uppercaseString];
    if (result.length <= 2)
        textField.text = result;
    else
    [txt_modifier2 becomeFirstresponder];

    return NO;
   }
}
else if( textField==txt_modifier2 )
{
same code of above block just change the text filed on which you want to focus next
}
else if(textField==txt_modifier3 )
{
same code of above block just change the text filed on which you want to focus next
}
else if(textField==txt_modifier4) 
{
same code of above block just change the text filed on which you want to focus next
}

これが役に立てば幸いです。結果を教えてください

于 2013-06-17T08:03:25.983 に答える